gpt4 book ai didi

.net - 服务引用不生成客户端类型

转载 作者:行者123 更新时间:2023-12-03 05:02:07 27 4
gpt4 key购买 nike

我试图通过添加服务引用来使用类库中的 WCF 服务。在其中一个类库中,它被正确使用,我可以访问客户端类型以便生成它们的代理。然而,在我的第二个类库中(甚至在控制台测试应用程序中),当我添加相同的服务引用时,它仅公开合约操作中涉及的类型,而不公开供我生成代理的客户端类型。

例如端点有 2 个公开的服务 - ISvc1 和 ISvc2。当我在第一个类库中添加对此端点的服务引用时,我得到 ISvc1Client 和 ISvc2Client 来生成代理,以便使用通过这两个合约公开的操作。除了这些客户端之外,服务引用还公开了操作中涉及的类型(类型 1、类型 2 等),这就是我所需要的。但是,当我尝试在另一个控制台应用程序或类库中添加对相同端点的服务引用时,仅暴露类型 1、类型 2 等,而不暴露 ISvc1Client 和 ISvc2Client,因为我无法生成代理来访问我需要的操作。我无法确定为什么服务引用在一个类库中正确生成,但在另一个类库或测试控制台应用程序中却不能正确生成。

最佳答案

您可能选择了在指定的引用程序集中重用类型,但没有选择非常重要的mscorlib库。

首先单击解决方案资源管理器顶部的“显示所有文件”,以便展开服务引用。

enter image description here

  • 找到 Reference.cs 文件并将其打开。
  • 在源代码中搜索 ClientBase 以确保您确实没有生成具有您不期望的名称的客户端。如果您找到它,那么这就是您的服务客户端的名称。

enter image description here

如果没有匹配的内容,则右键单击服务引用并选择配置服务引用

重要的是mscorlib,它是正确生成客户端所必需的。我还喜欢选择 System.Xml.Linq 来获得漂亮的 Linq 类,例如 XElement 而不是 XmlElement

enter image description here

<小时/>

仍然卡住吗?

  • 提示:我总是更喜欢创建一个专用的 DLL 仅供服务引用。如果您需要将其清除并重新开始,它会有所帮助,并且偶尔可以避免某些先有鸡还是先有蛋的编译问题。

  • 如果您最终得到了一半的 References.cs 文件,您可能会“重用与您的数据协定不兼容的引用类型”。即,您在服务器端添加了数据成员,或者更改了现有成员的签名,例如使值类型成为可选。

  • 首先,要认识到 SVCUTIL 会非常乐意生成不完整的输出文件,即使它有问题,并且从 Visual Studio 运行时您不会获得日志文件。请密切关注资源管理器中的预期尺寸,并将其与“最后已知的正确”尺寸进行比较。

  • 尝试直接从批处理文件运行 SVCUTIL.EXE(记住保存此文件以供下次使用)

  • 这在 Visual Studio 命令提示符中最容易完成

  • 示例命令如下,请注意您要从中引用类型的 DLL 的reference 参数。

    svcutil.exe http://dev.example.com/SSWPF.Web/Services/SS.svc/reference:bin\debug\RRStore.Sys.DLL

Detail: An exception was thrown while running a WSDL import extension:

System.ServiceModel.Description.DataContractSerializerMessageContractImporter Error: Referenced type 'SS.Sys.ShippingRateInfo, RRStore.Sys, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' with data contract name 'ShippingRateInfo' in namespace 'http://schemas.datacontract.org/2004/07/SS.Sys' cannot be used since it does not match imported DataContract. Need to exclude this type from referenced types. XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISSWCF']

幸运的是,这里的答案很简单,我的类型 ShippingRateInfo 已更改,但我没有更新它。一旦我从服务器复制了这个类型,一切都编译得很好(我选择恢复到 VS 工具)。

关于.net - 服务引用不生成客户端类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com