问题标签 [wcf-client]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1648 浏览

wcf - 创建 WCF 服务引用的正确方法?

我有一个基于 TCP 的自托管 WCF 服务。我现在正在构建一个使用该服务的项目,但似乎至少有两种方法可以将服务引用添加到项目中,并且两者都会产生截然不同的代理。首先,我使用项目菜单中的“添加服务引用”,但这会生成相当多的文件,甚至是核心 .Net 类型的一些 XML 模式。然后我尝试了只生成两个文件的 SvcUtil,一个代理和一个包含服务引用和绑定参数的配置文件,这要好得多但是......

在这两种情况下,VS 工具似乎都重现了类型定义,即使我提供了对包含服务及其使用的所有类型的程序集的引用。例如,我的一些服务方法返回实体类的通用集合。所有实体类都是在我直接从消费项目引用的程序集中定义的,那么为什么要再次重新定义这些类型呢?

如果有人可以就使用返回实体类型的 WCF 服务以及它们遵循的任何最佳实践提供一些建议,我将不胜感激。

0 投票
1 回答
3032 浏览

wcf - WCF 错误 109:这是从管道读取的错误。管道在客户端关闭

我的客户端应用程序出现以下错误

使用我的 OperationContract 的特定实现时。以下是切入要点的示例。我的 DataContracts 是这样的:

我的 ServiceContract 看起来像这样:

[ServiceContract] 公共接口 IAuthentication {

}

我像下面的类一样实现这个服务:

注意:两种方法都返回相同的类型,只有一种方法实例化了一个 Person 并返回它,而第二种方法实例化了一个 Employee 也是一个 Person。

当我从客户端调用它时,我在服务器上没有收到任何错误,但在客户端:

输出是:

正在连接到 Authenticate 服务... GetDeveloper OK : Asghar Panahy 从管道读取错误:De pipe is beëindigd。(109, 0x6d)。

有人可以帮我吗?阿斯加尔

0 投票
3 回答
12306 浏览

wcf - WCF - 无法使用以下搜索条件找到 x.509 证书

好的,我已经看到了与此问题相关的几个问题,并且我尝试了很多其中提出的想法,但没有成功。这是我的情况:

我正在通过我公司的 Intranet 访问 Web 服务。我使用 svcutil.exe 为 WCF 生成客户端类。当服务正在开发中并且不需要身份验证凭据时,我能够毫无问题地运行 Web 服务调用,因此我知道代码有效。当时,代码在 SSL 上运行。我将所需的证书导入到受信任的根证书颁发机构存储中,一切都很好。

我们刚刚转移到舞台环境,并且服务已升级为需要凭据才能连接。我将连接切换到新端点,并添加了验证代码。这是我第一次使用 wcf,所以请耐心等待任何明显的错误。我的问题是我无法通过代码找到证书以传递给服务进行身份验证。我基于我找到的一些在线代码示例。

这是我的 svcutil 生成的配置示例:

这是我用来尝试连接的代码。一旦我尝试找到证书,就会抛出异常:

我尝试了几种不同的 X509FindTypes,并将它们与证书上的值匹配,但没有成功。我的代码有问题吗?还有另一种方法可以查询证书存储以验证我传递的值吗?

我运行 Visual Studio 的开发机器已导入证书。

0 投票
1 回答
13376 浏览

c# - 如何强制 .net WCF 客户端在 basicHttpBinding 中使用 NTLM?

现在我有这样定义的安全节点:

我收到以下错误:

HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是“NTLM”。

0 投票
3 回答
223 浏览

c# - 如何创建“更智能”(即键入检查/只读属性)客户端 DataContract 对象?

我非常坚持将 WCF 用于客户端/服务器消息传递系统的一部分,非常感谢一些帮助。

在服务器上,我有一个 Message DataContract 对象,其中一个属性指向 MessageBody DataContracts 的类型化集合。该类的精简版本如下所示:

从 App.Client.dll,我创建了 ServiceContract 和 DataContracts 的 WCF 代理(顺便说一句:没有引用我可以放置上述定义的 DataContracts 的通用“App.Contracts.dll”),用于从客户端传输数据到服务器,我现在一切就绪......

但是从客户端的用户功能方面来看,还有很长的路要走。

我想确保用户可以使用上述属性,但在实例化客户端对象时会进行一些类型检查。例如,我希望用户使用的实际类看起来更像:

我试图用来解决这个问题的一个方向如下:

如果我将 DataContract 从 Message 重命名为 CommMessage,然后我可以用更智能的对象包装 POCO/WCF 对象......但是尽管这适用于大多数属性,但集合属性除外:

非常感谢任何和所有的建议!

0 投票
5 回答
65363 浏览

wcf - 如何在运行时通过 URL 使用 WCF Web 服务?

我想通过 URL 访问服务中公开的所有方法。如果假设 URL 将是:

如何访问方法:

  1. 如果假设我有一个 ServiceReference
  2. 如果没有服务参考,我该怎么办。
0 投票
1 回答
2119 浏览

wcf - 如何在使用 WCF Web 服务时对客户端进行身份验证?

我想在使用 Web 服务时对客户端进行身份验证。我看到客户端中公开了一个名为 ClientCredential 的属性,我们可以在其中传递用户名和密码。如何将此信息传递给我的 WCF Web 服务以及如何验证用户 ID 和密码?

0 投票
7 回答
8098 浏览

wcf - 在哪里捕获 WCF 调用类上的失败连接?

我正在尝试编写一个封装 WCF 调用的类(如果重要,客户端是 Silverlight)。这一切都很顺利,但我不确定如何捕获连接失败,就好像服务器不会响应一样。似乎在 ChannelFactory 生成的代码中某处发生了一些工作,但我不确定。也欢迎一般的代码审查。:)

底线,围绕通道的创建,或者 try/catch 中的开始或异步结果委托不会捕获失败的连接。我想让那个 catch 运行 ServiceCallError 事件。

这是堆栈跟踪,对于那些好奇的人:

为此,我在浏览器中启动应用程序,然后从 Visual Studio 中终止 Web 服务器进程。在测试环境中,我通过终止客户端系统的网络连接得到同样的结果。

这是完整异常的 ToString():

顺便说一句,我能抓住这一点的唯一方法是在 SL 客户端中使用应用程序级别的 UnhandledException 事件。

0 投票
3 回答
1668 浏览

wcf - 通过 URL 访问 WCF 服务

我有一个 WCF 服务(比如说 WCFService1 )部署在两台远程机器上。由于相同的服务部署在两台不同的机器上,它们具有公开的通用接口和通用方法。

WCFService1 部署在 Machine1 和 Machine2 上。

为了从客户端使用 WCF 服务,我创建了一个客户端应用程序:

  1. 我添加了 WCF 服务 (WCFService1) 的设计时参考(借助 URL http://11.12.25.23/WCFService/Service1.svc)。

  2. 现在我可以调用服务中公开的方法。到现在为止还好...

现在我的问题是,如果我必须在运行时使用托管在具有不同 URL 的不同机器上的相同服务来更新客户端(比如说http://12.12.24.24/WCFService/Service1.svc),我该怎么做?

目前我正在这样做:

但是每当我使用调用服务中公开的方法时,我都会遇到绑定不匹配错误。

0 投票
4 回答
25697 浏览

c# - 在 WCF 客户端中拦截消息

有没有人有任何使用 Web 服务扩展的经验?我花了一些时间尝试从 MS 示例中进行 Web 服务扩展。

我有一个 .net 3.5 Web 服务客户端,通过 VS IDE“项目 > 添加服务引用”添加对 WSDL 的引用来构建。这构建了我的 Web 服务客户端,一切正常。

我需要为我的 Web 服务客户端截取请求和响应正文。我找到了很多对 Web 服务扩展的引用,但是我已经厌倦了攻击,只是无法让我的扩展启动。

我使用了此处“如何实现 SOAP 扩展”(http://msdn.microsoft.com/en-us/library/7w06t139.aspx)中的 MS 示例,它为请求/响应流构建了一个记录器。

相关的 MS 文章“Soap 消息修改”(http://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx)展示了如何为 Web 客户端启用 SOAP 扩展:

实现 SOAP 扩展

有两种方法可以在客户端或服务器应用程序上运行 SOAP 扩展。首先,您可以配置应用程序以运行扩展程序。要将 SOAP 扩展配置为针对所有 Web 服务(尤其是 vroot)上的所有 Web 方法运行,请编辑<soapExtensionTypes>Web.config 文件中的 Element 部分。以下代码显示 type 属性值必须位于一行,并且包括扩展的完全限定名称,以及签名程序集的版本、文化和公钥标记。

<configuration>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Contoso.MySoapExtension, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority="1" group="0"/>
< /soapExtensionTypes>
</webServices>
</system.web>
</configuration>

我已经将 traceextension 编译到它自己的类库中,并在 web 服务项目的 web.config 中引用它,如下所示:

<add type="TraceExtension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ef8757fac167b8d8" priority="1" group="High"/>

没有喜悦。没有记录任何内容,也没有遇到断点。

然后我删除了引用的类,并将源代码放入 Web 服务项目中。

我试图像这样添加对它的引用(我的命名空间是 ServcieTest001):

<add type="ServiceTest001.TraceExtension" group="High" priority="1" />

我使用以下线程作为指导,使我能够扩展“getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net”(http://stackoverflow.com/questions /300674/getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net)。

仍然没有喜悦。然后我从上面的线程中复制了代码,当我发出 SOAP 请求时仍然无法触发扩展。

谁能给我指出一个功能正常的可下载 Web 服务扩展演示项目,这样我就可以反汇编它并找出我缺少的东西?