2011-01-14 10 views
0

I JSONP hat meinen WCF ServiceContract aktiviert. Client ruft erfolgreich den JSONP-Dienst (OperationContract) auf. Ich habe eine Reihe anderer OperationContracts (die den gleichen ServiceContract verwenden), die ich mit dem basicHttpBinding (SOAP) -Endpunkt bereitstellen möchte - unter Verwendung derselben URI. Ich denke, dass meine Service WebConfig korrekt eingerichtet ist. Wenn ich so etwas machen kann, sollte ich die Service-Referenz (Proxy) über das VS "Add Service Reference" -Dialogfenster hinzufügen können? Oder muss ich Client-Code manuell in Codehind generieren? Wenn ich es manuell tun muss, kann mir jemand ein Beispiel geben? Oder ist meine Service WebConfig nicht richtig konfiguriert? Ich rufe den JSONP Dienst dies mit: http://Flixsit:1000/FlixsitWebServices.svc/jsonpKonfigurieren von WCF-JSONP- und SOAP-Endpunkten Anhören desselben URI

Thanks so much ...

<system.serviceModel> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="webHttpBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="DefaultBehaviors">   
     <serviceMetadata httpGetEnabled="true" />   
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <webHttpBinding> 
    <binding name="JSONPBinding" crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
    <basicHttpBinding> 
    <binding name="SOAPBinding" /> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service name="Flixsit.Services.FlixsitWebServices" behaviorConfiguration="DefaultBehaviors"> 
    <clear /> 
    <endpoint name="JSONPEndPoint" address="jsonp" 
            binding="webHttpBinding" 
            bindingConfiguration="JSONPBinding" 
            contract="Flixsit.Services.IFlixsitWebServices" 
            behaviorConfiguration="webHttpBehavior" /> 
    <endpoint name="HttpEndPoint" address="" 
            binding="basicHttpBinding" 
            bindingConfiguration="SOAPBinding" 
            contract="Flixsit.Services.IFlixsitWebServices" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://Flixsit:1000/FlixsitWebServices.svc" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services>  

Antwort

0

Nach Ausrüstung um für eine Weile ich den Channel wie unten erschaffe (in Code-Behind). Dienste sind jetzt an beiden Endpunkten verfügbar.

try 
    { 
     EndpointAddress address = new EndpointAddress("http://Flixsit:1000/FlixsitWebServices.svc"); 
     WSHttpBinding binding = new WSHttpBinding(); 
     ChannelFactory<IFlixsitWebServices> factory = new ChannelFactory<IFlixsitWebServices>(binding, address); 
     IFlixsitWebServices channel = factory.CreateChannel(); 

     //call the service operation 
     var customer = channel.GetCustomers(); 

     GridView1.DataSource = customer; 
     GridView1.DataBind(); 

     //close the channel 
     ((ICommunicationObject)channel).Close(); 

     //close factory 
     factory.Close(); 
    } 
    catch (Exception ex) 
    { 
     //log ex; 
    }