【问题标题】:How to specify a method of a server to run when the server receives a request via WCF当服务器通过 WCF 接收请求时如何指定服务器的运行方法
【发布时间】:2017-03-02 03:04:06
【问题描述】:

我正在调试使用 WCF 接收请求并发送响应的服务器的代码。

我以前从未使用过 WCF。我发现当客户端发送请求时,会执行服务器中的一个方法。我没有看到关于方法声明的任何特别之处。

我想知道当服务器收到请求时如何指定服务器的运行方法? 这种方法的声明是显式指定的(使用一些修饰符)还是隐式指定的(通过特殊的方法名)?

【问题讨论】:

  • 你能澄清你的问题吗?您是否想知道实际收到的请求是什么?
  • 我在问服务器如何知道调用哪个方法来处理新收到的请求。
  • 当您说服务器时,您是指在服务器上运行的 WCF 服务吗?您是否有兴趣检查收到的请求?
  • 这取决于绑定。 REST 绑定使用 URL 模式,SOAP 绑定使用 SOAP 操作将传入请求映射到操作。你的研究表明了什么,你的实际问题是什么?你想做什么?另请参阅stackoverflow.com/questions/1686411/…stackoverflow.com/questions/6446480/… 等。
  • @CodeCaster 谢谢。如何判断它是 REST 还是 SOAP 绑定?

标签: c# wcf


【解决方案1】:

可调用的方法需要OperationContract 属性。

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

您在服务实现的接口中具有该属性

 [ServiceContract(...)]
 public interface IFoo
 {
      [OperationContract(...)]
      void Bar();
 }

 public class Foo : IFoo 
 {
      public void Bar()
      {
           ...
      }
 }

或者你可以省略接口,直接在实现中拥有属性

 [ServiceContract(...)]
 public class Foo : IFoo 
 {
      [OperationContract(...)]
      public void Bar()
      {
           ...
      }
 }

请注意,该属性具有Action 属性,该属性进一步指定客户端如何调用该操作

https://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.action(v=vs.110).aspx

【讨论】:

  • 这是故事的一部分。问题是 WCF 如何决定一个特定的请求应该调用一个特定的操作。
  • 谢谢。该类实现了一个接口。在接口中方法的声明中,在其声明的开头有一个[OperationContract]。它是否指定了在收到请求时要调用的方法?和[ServiceContract(...)]的意思有区别吗?
  • @Tim 为什么不从阅读 WCF 教程开始呢? MSDN has a great deal of information.
  • @Tim:您是否实现或使用过任何使用 SOAP 或 REST 绑定的 Web 服务?在这两者中的任何一个中,客户端都会发送一个 Web 请求,该请求以某种方式(取决于使用哪个)将请求参数绑定到特定方法,在 SOAP 中,它通常基于 Action,在特定 uri 路由上的 REST 中。
  • 谢谢。不,我没有。我以前从未学过 SOAP 或 REST。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多