我有一个使用我创建的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();
}
}
答案 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函数的代码和返回值。