我用一个可以使用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方法吗?
我需要将哪些内容添加到配置中?
答案 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,但是感觉不是很安静。
此致
米歇尔