当前位置:  开发笔记 > 编程语言 > 正文

WCF服务的REST/SOAP端点

如何解决《WCF服务的REST/SOAP端点》经验,为你挑选了4个好方法。

我有一个WCF服务,我想将它作为RESTfull服务和SOAP服务公开.以前有人做过这样的事吗?



1> Ray Lu..:

您可以在两个不同的端点中公开该服务.SOAP可以使用支持SOAP的绑定,例如basicHttpBinding,RESTful可以使用webHttpBinding.我假设您的REST服务将使用JSON,在这种情况下,您需要使用以下行为配置来配置两个端点


  
    
  

您的方案中的端点配置示例如下


  
    
    
  

所以,该服务将在

http://www.example.com/soap

http://www.example.com/json

将[WebGet]应用于操作合同以使其成为RESTful.例如

public interface ITestService
{
   [OperationContract]
   [WebGet]
   string HelloWorld(string text)
}

请注意,如果REST服务不在JSON中,则操作的参数不能包含复杂类型.

回复SOAP和RESTful POX(XML)的帖子

对于普通的旧XML作为返回格式,这是一个既适用于SOAP又适用于XML的示例.

[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
    [OperationContract]
    [WebGet(UriTemplate = "accounts/{id}")]
    Account[] GetAccount(string id);
}

REST Plain Old XML的POX行为


  

端点


  
    
    
  

服务将在

http://www.example.com/soap

http://www.example.com/xml

REST请求 在浏览器中尝试

http://www.example.com/xml/accounts/A123

添加服务引用后SOAP服务的SOAP请求客户端端点配置,

  
    
  

在C#中

TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");

另一种方法是公开两个不同的服务合同,每个合同都有特定的配置.这可能会在代码级别生成一些重复项,但是在一天结束时,您希望使其正常工作.


当我在IIS中的某些虚拟目录(例如http://someserver/myvirtualdir/service.svc)中托管.svc时,这看起来如何?我该如何访问它?
它如何在没有物理文件的情况下工作?我似乎只是得到404错误,必须遗漏一些东西

2> Tuomas Hieta..:

这个帖子已经有一个很好的答案通过"社区维基",我也建议看里克施特拉尔的网络博客,大约有WCF休息多好职位像这样.

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

这是来自我的Web.Config:


 
  
   
   
   
  
 
 
  
   
    
    
   
  
  
   
    
   
  
 

这是我的服务类(.svc-codebehind,不需要接口):

    ///  MyService documentation here ;) 
[ServiceContract(Name = "MyService", Namespace = "http://myservice/", SessionMode = SessionMode.NotAllowed)]
//[ServiceKnownType(typeof (IList))]
[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){
    //...


您可以通过浏览器发出请求:http://localhost/MyService.svc/MyXmlResource/test并明确说明格式为Json或Xml.如果你想要同样的方法来回应两者,这里有一个链接:http://blogs.msdn.com/dotnetinterop/archive/2008/11/04/rest-in-wcf-varying-response-content-type-based-上http请求-headers.aspx

3> mythz..:

如果您只想开发单个Web服务并将其托管在许多不同的端点上(即SOAP + REST,使用XML,JSON,CSV,HTML输出).您还应该考虑使用我为此目的构建的ServiceStack,您开发的每个服务都可以在开箱即用的SOAP和REST端点上自动使用,而无需任何配置.

在的Hello World例子说明如何创建与服务的简单只(无需配置):

public class Hello {
    public string Name { get; set; }
}

public class HelloResponse {
    public string Result { get; set; }
}

public class HelloService : IService
{
    public object Any(Hello request)
    {
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
}

无需其他配置,此服务可立即在REST中使用:

肥皂

XML

JSON

HTML

它还内置了友好的HTML输出(当使用具有Accept:text/html的HTTP客户端调用时,例如浏览器),因此您可以更好地可视化服务的输出.

处理不同的REST动词也很简单,这里是一个完整的REST服务CRUD应用程序,在1页的C#中(少于配置WCF所需的);

前端TODO应用程序

后端REST服务实现



4> FMFF..:

MSDN现在似乎有一篇文章:

https://msdn.microsoft.com/en-us/library/bb412196(v=vs.110).aspx

介绍:

默认情况下,Windows Communication Foundation(WCF)使端点仅对SOAP客户端可用.在如何:创建基本WCF Web HTTP服务中,端点可供非SOAP客户端使用.有时您可能希望以相同的方式提供相同的合同,如Web端点和SOAP端点.本主题显示了如何执行此操作的示例.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有