2011-01-10 1 views
0

ich WCF-Dienst erstellt haben, hier ist es Konfigurationsabschnitt ist:WCF-Dienst: Können diese Methoden nicht durch den Endpunkt ‚WebHttpBinding‘ nennen

<system.serviceModel> 
<services> 
    <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior"> 
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="McActivationApp.EnrollmentServicBehavior"> 
     <serviceMetadata httpGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

ich mit dem Dienst verbunden mit WcfTestClient, zusätzlichen Service und nennen kann Nur Methoden, die sich im Abschnitt "IEnrollmentService (MetadataExchangeHttpBinding_IEnrollmentService)" befinden (sie funktionieren wie erwartet).

Aber Methoden aus einem anderen Abschnitt "IEnrollmentService (WebHttpBinding_IEnrollmentService)" sind nicht aufrufbar. Wenn ich versuche, einen von ihnen zu nennen erhält ich folgende Fehlermeldung:

Failed to invoke the service. Possible causes: The service is offline or inaccessible; the client-side configuration does not match the proxy; the existing proxy is invalid. Refer to the stack trace for more detail. You can try to recover by starting a new proxy, restoring to default configuration, or refreshing the service.

Fehlerdetails:

The Address property on ChannelFactory.Endpoint was null. The ChannelFactory's Endpoint must have a valid Address specified. 
    at System.ServiceModel.ChannelFactory.CreateEndpointAddress(ServiceEndpoint endpoint) 
    at System.ServiceModel.ChannelFactory`1.CreateChannel() 
    at System.ServiceModel.ClientBase`1.CreateChannel() 
    at System.ServiceModel.ClientBase`1.CreateChannelInternal() 
    at System.ServiceModel.ClientBase`1.get_Channel() 
    at EnrollmentServiceClient.UpdateEnrollmentProfile(String enrollmentId, String siteName, String deployServerName, Int32 methodId, String deviceClass, String deviceName, String registrationCode) 

Frage 1: Bin ich richtig zu verstehen, dass für Fall von „IEnrollmentService (WebHttpBinding_IEnrollmentService) "Methoden aufrufen Ich muss zusätzlich einen Endpunkt angeben?

Frage 2: Kann ich überhaupt funktionsfähig werden?

Frage 3: Sollte ich mich um sie kümmern (wie ich Methoden aus meiner "benutzerdefinierten" Anwendung aufrufen kann)?

Antwort

2

Danke, Jungs, für Ihre Antworten, gaben sie mir etwas zum Nachdenken. Hier finden Sie Antworten auf meine Fragen:

Answer1:

Eigentlich, wie „marc_s“, so wird das Problem ist, dass mein Dienst als ‚REST‘ Dienst konfiguriert wurde, so Antwort ist „Ja“ zu erhalten Diese Dienste, auf die für den zusätzlichen Endpunkt WcfTestClient (basicHttpBinding) zugegriffen werden kann, sind erforderlich.

Antwort2:

Wie in "answer1", sagte: ja, um es praktikabel Sie benötigen Endpunkt Basichttpbinding hinzuzufügen.

ANSWER3:

Es hängt davon ab. Wenn Sie nicht mit WcfTestClient "testen" wollen, ist das egal. In meinem speziellen Fall werde ich Komponententests implementieren, um Methodenaufrufergebnisse zu überprüfen, so dass die Funktionsfähigkeit in WcfTestClient nicht wichtig ist.

Vielen Dank und "+1" für jede hilfreiche Antwort.

P.S. Der Grund, warum ich eine eigene Antwort akzeptiert habe, ist die Übereinstimmung mit Fragen, die für mich essentiell sind.

2

WCFTestClient unterstützt keine REST-Dienste (WebHttpBinding).

+0

Gut zu wissen. Vielen Dank. – Budda

2

Sie sollten Methoden auf einem Dienst mit webHttpBinding (REST) ​​mit einem normalen Browser aufrufen können - kein WcfTestClient erforderlich .... das ist der ganze Punkt (und der Vorteil) von REST - es ist nur ein "XML-over- HTTP "Service (stark vereinfacht).

Einfach nur Ihrem Browser

http://YourServer/YourVirtualDirectory/YourService.svc 

bei Ihrem Dienstendpunkt zeigen und sollten Sie Ihren Dienst sehen, die dort leben können ...

+0

Ja, ich sehe diesen Service. Aber ich sehe seine Methoden nicht. Oder werden sie nicht wie WebServices angezeigt? Ich muss sie nur "benutzen" und das war's. Recht? – Budda

+0

In .NET 4/WCF 4 sollten Sie in der Lage sein, eine automatische Hilfeseite zu konfigurieren, die von den Dienstmethoden generiert wird (leider keine solche Funktion in WCF 3.5) –

Verwandte Themen