以下问题可能重复,但没有足够的信息可以回答我的问题。
Is possible to access WCF Service without adding Service Reference?
我已按照本指南使用Visual Studio中的WCF服务库项目设置了TCP服务。
https://msdn.microsoft.com/en-us/library/ff649818.aspx
如果您从客户端(Windows窗体项目)添加对WCF服务库项目的引用,这非常有用。并将一个using语句添加到项目程序集中并使用此代码。
TcpService.Service myService = new TcpService.Service();
myService.GetData(123);
但是,我不想在其中添加对TcpService程序集的引用 调用方法“GetData”的项目。每一个 上面的问题答案。
所以我尝试使用这段代码。我添加了对System.ServiceModel(和using指令)的引用来解决大多数错误。但现在它说“找不到类型或命名空间名称'ServiceContract'(你是否缺少using指令或程序集引用?)”。我是否需要在我的服务中修改App.Config,或者将任何其他代码(关于'ServiceContract')添加到调用此代码的项目中?
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("net.tcp://localhost:8523/Service");
ChannelFactory<ServiceContract> factory = new ChannelFactory<ServiceContract>(binding, address);
ServiceContract channel = factory.CreateChannel();
channel.GetData(123);
注意:我将默认的Service1.cs和默认接口IService1.cs重命名为Service.cs和IService.cs。没有“1”作为后缀,基于说明。我还在我的代码中将WcfServiceLibrary1重命名为TcpService。此外,在.NET 4.5中,我根本不需要这行代码才能工作。这个.Close()出错了。
myService.Close();
我在Visual Studio中添加了一个服务引用,右键单击了Project&gt;添加&gt;服务参考。但我在那里得到了一个错误。
第二个对话框出错:
无法识别URI前缀。元数据包含一个引用 无法解决:'net.tcp:// localhost:8523 / Service'。不能 连接到net.tcp:// localhost:8523 / Service。连接尝试 持续时间为00:00:01.0011001。 TCP错误代码10061:否 可以建立连接,因为目标机器主动拒绝 它127.0.0.1:8523。由于目标,无法建立连接 机器主动拒绝它127.0.0.1:8523如果服务已定义 在当前的解决方案中,尝试构建解决方案并添加 服务参考。
答案 0 :(得分:1)
指南错过了一步。除了httpsGetEnabled
属性之外,我还将httpGetEnabled
设置为“false”,并且它有效!之后,我在添加服务引用时不再收到错误。然后我将'ServiceContract'更改为'MyClientProject.ServiceReference1.IService'以引用新的服务引用。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>