1

以下问题可能是重复的,但没有足够的信息来回答我的问题。

是否可以在不添加服务参考的情况下访问 WCF 服务?

我已经按照本指南在 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);

但是,我不想在调用方法“GetData”的项目中添加对 TcpService 程序集的引用。根据上面第一个问题的答案。

所以我尝试使用这段代码。我添加了对 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 中添加了一个服务引用,方法是右键单击“项目”>“添加”>“服务引用”。但我在那里得到一个错误。

在此处输入图像描述

第二个对话框中的错误:

无法识别 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 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

4

1 回答 1

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>
于 2016-01-28T21:19:53.713 回答