我可以为我的WCF服务提供什么操作合同?

时间:2011-11-12 08:16:41

标签: wcf

我目前正在开发一个C#Windows窗体应用程序,我打算让它与服务器进行交互。服务器将从我开发的移动应用程序接收发布,并且每当收到发布时,我的Windows窗体应用程序应该得到通知并给我通知。现在我开始为它创建一个WCF服务。

这是我的意思的示例场景,

E.g。我的移动应用程序将消息发送到我的服务器。一旦我的服务器收到消息,我的Windows窗体应用程序应显示一条新通知,显示收到的消息内容。

所以对于服务的合同,我应该输入什么类型的方法才能收到帖子?

e.g。

[OperationContract]
bool receivePosting(int n);

1 个答案:

答案 0 :(得分:2)

我不太清楚你想要传达的方向:

  • 您的“服务器”需要通知Winforms应用程序已保存的新帖子吗?

或:

  • 您的Winforms应用程序询问“服务器”有关新帖子的信息吗?

我将“server”放在引号中,因为在WCF世界中,这是一个用于特定角色的术语。

假设第一个选项,您需要这样做:

  • 您的Winforms应用需要是WCF服务器 - 例如它需要定义服务合同,运营合同和数据合同 - 并实施那些

  • 在这种情况下,您的“发布服务器”将是WCF 客户端;无论何时收到/存储发布,您都可以在Winforms应用程序中调用WCF服务来发送通知(实际上,在此设置中,您的角色是保留的 - Winforms应用程序是WCF服务器)

关于运营合同 - 您的Winforms应用程序需要了解新发布的内容?只是收到了新帖子这一事实?发布的全部内容,还是只是其中的一部分?

在任何情况下,您都需要在WCF服务上定义一个“发布服务器”可以调用并将所有相关信息传递给Winforms WCF服务器的方法 - 您不希望只需要进行两次或多次调用一个通知。

所以你的服务合同可能是:

[ServiceContract]
public interface IPostingService 
{
   [OperationContract]
   void NotifyAboutPosting(Posting post);
}

并且您的Posting类将是数据合同:

[DataContract]
public class Posting
{
   [DataMember]
   public int ID { get; set; }
   [DataMember]
   public string Description { get; set; }
   [DataMember]
   public DateTime PostingTimestamp { get; set; }
}

无论您需要在这两方之间发送什么 - 在您的数据合同中定义它,这是您的服务电话的参数