2012-03-24 1 views
2

ich eine WCF in einem verwalteten Windows-Dienst entwickelt, basierend auf dieser tutorialAktivieren WCF Anrufe in einer Windows Phone Mango

Dies ist, wie meine Schnittstelle definiert ist:

namespace HomeAutomationWindowsService 
{ 
    [ServiceContract] 
    public interface IHomeAutomation 
    { 
     [OperationContract] 
     string connect(); 

     [OperationContract] 
     Boolean sendAction(string address, string command); 
    } 
} 

Und meine Datei App.config ist wie folgt:

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="Unsecured"> 
      <security mode="None" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="HomeAutomationWindowsService.HomeAutomationService" 
       behaviorConfiguration="HomeAutomationServiceBehavior"> 
     <host> 
      <baseAddresses> 
       <add baseAddress="http://192.168.11.178:8000/service"/> 
      </baseAddresses> 
     </host> 
     <!-- this endpoint is exposed at the base address provided by  host: http://localhost:8000/service --> 
     <endpoint address="" 
        contract="HomeAutomationWindowsService.IHomeAutomation" 
        binding="wsHttpBinding" 
        bindingConfiguration="Unsecured" /> 
     <!-- the mex endpoint is explosed at http://192.168.11.178:8000/ mex --> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="HomeAutomationServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="False"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Wenn ich von einer Konsole oder einer WPF-App aus anrufe, kann ich die öffentlichen Methoden sehen, aber wenn ich Windows Phone benutze, kann ich nichts sehen.

Was ich tun sollte, um meine WCF oder Windows Phone miteinander kommunizieren zu lassen.

+0

Haben Sie versucht, Service-Referenz hinzuzufügen? Überprüfen Sie diesen Artikel: http://eliasmarkelis.wordpress.com/2011/02/27/windows-phone-7-with-wcf/ –

+0

Haben Sie Ihrer Serviceseite eine CrossDomainPolicy-Datei hinzugefügt? – kroonwijk

+0

In Desktop Silverlight benötigen Sie eine Datei, die angibt, dass Sie auf den Dienst zugreifen können. Es heißt clientaccesspolicy.xml und muss im Stamm der Domäne sein. Möglicherweise wurde dieses Verhalten von Windows Phone übernommen. –

Antwort

0

Ich denke, WsHttpBinding wird nicht von WP7 unterstützt. Versuchen Sie es mit BasicHttpBinding:

Web.config:

<system.serviceModel> 
    <services> 
     <service name="MyProject.MyService" behaviorConfiguration="behavior"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="binding" contract="MyProject.MyService" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="behavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="binding"> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    </system.serviceModel> 

Nach dem Hinzufügen des Webservice zu Ihrem WP7-Projekt (Dienstverweis hinzufügen) die ServiceReferences.ClientConfig aussehen soll (Hinzufügen von Web-Service mit WsHttpBinding eine leere Datei erzeugt):

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_DataService" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647"> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://localhost:44300/Services/DataService.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DataService" 
       contract="DataService.DataService" name="BasicHttpBinding_DataService" /> 
     </client> 
    </system.serviceModel> 
</configuration>