无法访问ServiceHost方法

时间:2012-02-10 03:28:39

标签: c# .net wcf silverlight visual-studio-2010

我有一个使用我创建的WCF服务的Silverlight项目。我的问题是,在我的WCF服务中,我创建了一个ServiceHost,但VS2010似乎无法识别我的对象的实例(强调svHost)。以下是我服务的代码。

using System;
using System.Collection.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Activation;

namespace userIO.Web
{
     [ServiceContract]
     public class CoordsService
     {
         [OperationContract]
         public double xDir();
         [OperationContract]
         public double yDir();
         [OperationContract]
         public String keyPressed();

         public class Coords : CoordsService
         {
             public double xDir { get; set; }
             public double yDir { get; set; }
             public String keyPressed { get; set; }
         }

         ServiceHost svHost = new ServiceHost(typeof(Coords), new Uri("http://localhost:8080"));
         BasicHttpBinding binding = new BasicHttpBinding();
         svHost.AddServiceEndpoint(typeof(CoordsService), binding, "");
         svHost.Open();
     }
}

1 个答案:

答案 0 :(得分:2)

您的ServiceContract应该装饰一个接口(合同)。 ServiceHost应承载此接口的实例,并且位于其托管的同一服务之外。至少我只是以这种方式看到它。

基本结构是:

[ServiceContract]
public interface IService
{
     [OperationContract]
     void DoSomething(Data data);
}

[DataContract]
public class Data
{
     [DataMember]
     int Num {get;set;}
}

public class Service : IService
{
    public void DoSomething(Data data)
    {  // do something }
}

// run in any other kind of app, console, win service, winform/wpf
static void Main()
{
         ServiceHost svHost = new ServiceHost(typeof(Service), new Uri("http://localhost:8080"));
         BasicHttpBinding binding = new BasicHttpBinding();
         svHost.AddServiceEndpoint(binding, "");
         svHost.Open();

}

在VS2010中启动并运行服务的更简单的解决方案是在新的WCF服务模板中创建服务。取出他们的演示代码,输入自己的servicecontract接口和实现服务代码,然后选择debug - >运行和VS2010将为您托管服务,而无需创建外部应用程序来运行该服务。还可以让您将数据发送到服务,以便在简单的winforms应用程序中测试wcf函数的代码和返回值。