【问题标题】:WCF service reference and the use of "?wsdl"WCF服务参考和“?wsdl”的使用
【发布时间】:2013-10-27 11:44:19
【问题描述】:

在 Visual Studio 中向项目添加 WCF 服务引用时,指定 url http://domain/MyService.svchttp://url/MyService.svc?wsdl 有什么区别吗?在目标服务在 https 或目标服务需要身份验证的情况下,是否有任何特殊差异?

在“添加服务引用”窗口中,如果单击“高级...”按钮,它会落在“引用服务”窗口中,在后者中我们会找到“在引用的程序集中重用类型”复选框。我想知道这个复选框的含义。 根据我的测试,选择该复选框时,对于服务使用的每个DataContract,Visual Studio将在项目引用的组件中搜索相应的DataContract类,如果它找到对应的类,则它将使用它而不是创建一个新的 DataContract 类。如果未选中该复选框,Visual Studio 会为服务使用的每个 DataContract 创建一个新类。在所有情况下都会创建 ServiceContract 接口和代理类(复选框是否选中)。真的是这样吗?

【问题讨论】:

    标签: visual-studio-2010 wcf


    【解决方案1】:

    回答问题:

    指定urlhttp://domain/MyService.svchttp://url/MyService.svc?wsdl有什么区别

    否 - 如果您不指定 ?wsdl URL,向导将通过将 ?wsdl 附加到 URL 来获取 WSDL 以检索 wsdl。

    “在引用的程序集中重用类型”。我想知道这个复选框的含义

    如果您有权访问包含服务中使用的类的程序集(例如DataContracts)并从客户端引用它们,则此复选框允许您重用这些类型而无需在客户端上创建新的代理类型。

    如果你真的不想在客户端创建代理服务接口和数据传输类,那么看看ChannelFactory。这样,您根本不需要添加服务引用(但您将需要服务的 ServiceContract 接口和数据传输程序集)

    【讨论】:

    • 等一下,你的意思是如果勾选了复选框并且我的项目引用了ServiceContract接口,则不会创建接口?那么代理类(继承自 System.ServiceModel.ClientBase 的类)呢?
    • 不,我的意思是,如果您在客户端项目中添加对包含Service Contract 接口和DataContract 类的程序集的直接引用,那么您可以完全取消Add Service Reference 步骤(例如,避免将来必须更新服务参考等)。您仍然需要调整客户端 *.config 文件(或以编程方式执行此操作)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多