这个问题是我上一个问题的后续问题,我发现它在我的计算机上不能 100% 工作:WCF service not running on non-dev machine
我正在研究这个例子:
http://msdn.microsoft.com/en-us/library/ff649818.aspx
事实证明,InstallUtil 步骤在这里并没有真正起作用。我发现,如果 VS2010 打开了项目,并且您像教程的步骤 8 中那样添加服务引用,VS2010 实际上会启动服务主机,因此会创建一个引用。
这是我到目前为止的调试方式:
按照InstallUtil安装服务,关闭VS2010解决方案;然后打开一个完全不同的解决方案(TESTWCF)尝试添加服务引用,但失败 - 无法在指定地址找到
再次打开 WCFServiceLibrary1 项目作为 VS2010 的单独实例。尝试向 TESTWCF 添加服务引用,但失败。
在 WCFServiceLibrary1 中,尝试步骤 8 - 添加服务引用。这会导致服务主机启动并找到该服务。
在服务主机仍在运行的情况下,我在 TESTWCF 中尝试添加服务并且它有效。
关闭服务主机并尝试在 TESTWCF 中添加引用,但它不再起作用。
这一切似乎完全独立于 InstallUtil 安装的服务运行或不运行。
我还通过从头开始创建新的虚拟服务器并逐一加载内容来验证这一点。只有安装了 VS2010 后它才开始工作 - 当我在上面观察到时。
有什么想法吗?
最佳答案
WCF services can be self-hosted in an application (such as a console or a Windows Forms application)
我认为你把它弄得太复杂了,你甚至不必用InstallUtil安装它。 InstallUtil 将其安装为 Windows 服务运行,您可以创建控制台应用程序作为 WCF 服务。
您必须导入:
System.ServiceModel
System.ServiceModel.Web
System.Web.Services
我认为如果你想将其用作具有 get 和 post 的 Web 服务,则需要那些具有 Web 的。
然后您需要指定客户端和服务器的契约(Contract)。
[ServiceContract(Name = "SomeService", Namespace = "http://some.domain.com/some/someservice",SessionMode=SessionMode.Required)]
public interface ISomeService
{
[OperationContract]
string Execute(string expression);
}
您已经签订了契约(Contract),现在您必须在服务中实现它。没有什么特别的,只需使用这个接口(interface)即可。
非常重要的是app.config,你必须为客户端和服务指定好它。在配置中,您拥有指向服务的所有内容。
在客户端中,您必须添加服务作为引用,它应该像第 8 点中那样找到它,但前提是您的配置正确!
在客户端中只需在代码中执行以下操作:
using (ChannelFactory<ISomeService> channel = new ChannelFactory<ISomeService>("SomeService"))
{
ISomeService svc = channel.CreateChannel();
svc.Execute("my expression to evaluate by the service");
}
尝试采用最简单的方法,无需使用 InstallUtil 等,它不必是 Windows 服务来通过网络提供服务。
关于c# - MSDN WCF 服务示例不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738608/