WCF服务的REST / SOAP端点?

  • 回答 (2)
  • 关注 (0)
  • 查看 (68)

我有一个WCF服务,我想把它作为RESTfull服务和SOAP服务公开。有没有人曾经做过这样的事情?

六个六六个六提问于
人生的旅途辣鸡前端回答于

认情况下,Windows Communication Foundation(WCF)使端点只能用于SOAP客户端。在如何:创建一个基本的WCF Web HTTP服务,一个端点可用于非SOAP客户端。有时您可能希望以双方的方式创建同一个合同,如Web端点和SOAP端点。本主题显示如何执行此操作的示例。

定义服务合同

使用标有ServiceContractAttribute,WebInvokeAttribute和WebGetAttribute属性的接口定义服务契约,如下面的代码所示。

C#

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet]
    string EchoWithGet(string s);
    [OperationContract]
    [WebInvoke]
    string EchoWithPost(string s);
}
心愿回答于

我用这两种方法来获得这种MyService服务...然后我可以使用jQuery中的REST接口或Java中的SOAP。

这是从我的Web.Config:

<system.serviceModel>
 <services>
  <service name="MyService" behaviorConfiguration="MyServiceBehavior">
   <endpoint name="rest" address="" binding="webHttpBinding" contract="MyService" behaviorConfiguration="restBehavior"/>
   <endpoint name="mex" address="mex" binding="mexHttpBinding" contract="MyService"/>
   <endpoint name="soap" address="soap" binding="basicHttpBinding" contract="MyService"/>
  </service>
 </services>
 <behaviors>
  <serviceBehaviors>
   <behavior name="MyServiceBehavior">
    <serviceMetadata httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="true" />
   </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
   <behavior name="restBehavior">
    <webHttp/>
   </behavior>
  </endpointBehaviors>
 </behaviors>
</system.serviceModel>

这是我的服务类(.svc代码隐藏,不需要接口):

    /// <summary> MyService documentation here ;) </summary>
[ServiceContract(Name = "MyService", Namespace = "http://myservice/", SessionMode = SessionMode.NotAllowed)]
//[ServiceKnownType(typeof (IList<MyDataContractTypes>))]
[ServiceBehavior(Name = "MyService", Namespace = "http://myservice/")]
public class MyService
{
    [OperationContract(Name = "MyResource1")]
    [WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "MyXmlResource/{key}")]
    public string MyResource1(string key)
    {
        return "Test: " + key;
    }
    [OperationContract(Name = "MyResource2")]
    [WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "MyJsonResource/{key}")]
    public string MyResource2(string key)
    {
        return "Test: " + key;
    }
}

其实我只使用Json或Xml,但是这两者都是为了演示的目的。那些是获取数据的GET请求。要插入数据,我会使用具有属性的方法:

[OperationContract(Name = "MyResourceSave")]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "MyJsonResource")]
public string MyResourceSave(string thing){
    //...

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • 拉布拉多拉不多

    1 粉丝0 提问2 回答
  • 小书虫

    0 粉丝1 提问2 回答

扫码关注云+社区

领取腾讯云代金券