如何解决WCF服务中的错误并继续?

时间:2011-11-12 10:10:51

标签: wcf

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

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

我现在开始开发我的WCF服务,这是我到目前为止所做的

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

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

class Program
{
    static void Main(string[] args)
    {
        Uri baseAddress = new Uri("http://localhost/");

        ServiceHost selfHost = new ServiceHost(typeof(Posting), baseAddress);

        try
        {

            // Step 3 of the hosting procedure: Add a service endpoint.
            selfHost.AddServiceEndpoint(
                typeof(IPostingService),
                new WSHttpBinding(),
                "Posting");


            // Step 4 of the hosting procedure: Enable metadata exchange.
            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            selfHost.Description.Behaviors.Add(smb);

            // Step 5 of the hosting procedure: Start (and then stop) the service.
            selfHost.Open();
            Console.WriteLine("The service is ready.");
            Console.WriteLine("Press <ENTER> to terminate service.");
            Console.WriteLine();
            Console.ReadLine();

            // Close the ServiceHostBase to shutdown the service.
            selfHost.Close();
        }
        catch (CommunicationException ce)
        {
            Console.WriteLine("An exception occurred: {0}", ce.Message);
            selfHost.Abort();
        }

    }
}

关于发布类,我想问的是用于从服务器获取信息的内部方法是什么?

如何在服务完成后从这里继续。 (我的winform应用程序已经完成,剩下的就是添加这个逻辑,以便在移动应用程序发送到服务器时接收发布。

并且似乎存在

的编译错误
  

在服务'## .Posting'实施的合同列表中找不到合同名称'##。IPostingService'。

任何人都可以帮我这个吗?万分感谢!

2 个答案:

答案 0 :(得分:2)

您的实际实施在哪里?你有合同(IPostingService),数据(Posting)......但是代码在哪里做工作?你似乎缺乏合同实施:

public class PostingService : IPostingService
{
    public void NotifyAboutPosting(Posting post)
    {
        // do something with post here
    }
}

在设置主机时注册实际的工人类(而不是数据):

ServiceHost selfHost = new ServiceHost(typeof(PostingService), baseAddress);

答案 1 :(得分:0)