接收GET和SOAP请求的WCF方法

时间:2010-09-01 08:01:07

标签: wcf soap get webget

我用一个可以使用WebGET属性接收GET请求的方法创建了一个WCf服务,我想要同样的方法来接收Soap调用(当程序员对WCF进行服务引用时,他将能够调用法)。

我的界面是:

[ServiceContract] 
public interface IService1 
{ 
  [OperationContract] 
  [WebGet(UriTemplate = "GetData?value={value}")] 
  string GetData(int value); 
} 

我的配置是:

<configuration>
 <system.web>
  <compilation debug="true" targetFramework="4.0" />
 </system.web>
 <system.serviceModel>
  <behaviors>
   <serviceBehaviors>    
    <behavior name="MyServiceBehavior">
     <serviceMetadata httpGetEnabled="true"/>
     <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior> 
   </serviceBehaviors>
   <endpointBehaviors>
    <behavior name="WebBehavior">
     <webHttp />
    </behavior>
   </endpointBehaviors>
  </behaviors>
  <services>
   <service name="WCFTestingGetService.Service1" behaviorConfiguration="MyServiceBehavior" >
    <endpoint address="" binding="webHttpBinding" contract="WCFTestingGetService.IService1" behaviorConfiguration="WebBehavior"></endpoint>
   </service>
  </services>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
 </system.webServer>
</configuration>

我可以将Web方法GetData设为HTTP GET和SOAP方法吗?

我需要将哪些内容添加到配置中?

2 个答案:

答案 0 :(得分:1)

您可以在同一服务中使用REST和SOAP,但在SOAP的情况下,将使用HTTP POST调用操作。您的合同定义正确。您必须修改配置:

  <services> 
   <service name="WCFTestingGetService.Service1" behaviorConfiguration="MyServiceBehavior" > 
    <endpoint address="" binding="webHttpBinding" contract="WCFTestingGetService.IService1" behaviorConfiguration="WebBehavior"/>
    <endpoint address="soap" binding="basicHttpBinding" contract="WCFTestingGetService.IService1"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service> 
  </services> 

答案 1 :(得分:-1)

我会删除webget属性并使用basichttpbinding。然后,您可以使用任何soap或wcf客户端访问该服务。

你也可以在svc之外托管一个asmx,但是感觉不是很安静。

此致

米歇尔