【问题标题】:Issue adding service reference for wcf为 wcf 添加服务参考的问题
【发布时间】:2011-04-13 18:34:56
【问题描述】:
Warning 1 Custom tool warning: Cannot import wsdl:binding
Detail: The given key was not present in the dictionary.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://wrapper.dao.ccarwebservice.ids.com']/wsdl:binding[@name='CCaRWebServiceHttpBinding'] C:\Users\me\Documents\Visual Studio 2008  \Projects\CcarsWcfTest\CcarsWcfTest\Service References\ServiceReference1\Reference.svcmap 1 1 CcarsWcfTest

我可以做些什么来解决这个问题?

我已尝试从命令提示符运行服务实用程序并向我的项目添加服务引用。我还进入了“添加服务引用”对话框中的高级设置,并取消了“在所有引用的程序集中重用类型”。

编辑

这是我认为它所指的wsdl的一部分..

<wsdl:binding name="CCaRWebServiceHttpBinding" type="ns:CCaRWebServicePortType">
    <http:binding verb="POST"/>
    <wsdl:operation name="fnGetccarprogramsummaryarray">
        <http:operation location="CCaRWebService/fnGetccarprogramsummaryarray"/>
        <wsdl:input>
            <mime:content type="text/xml" part="fnGetccarprogramsummaryarray"/>
        </wsdl:input>
        <wsdl:output>
            <mime:content type="text/xml" part="fnGetccarprogramsummaryarray"/>
        </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="fnGetccarprogramsummary">
        <http:operation location="CCaRWebService/fnGetccarprogramsummary"/>
        <wsdl:input>
            <mime:content type="text/xml" part="fnGetccarprogramsummary"/>
        </wsdl:input>
        <wsdl:output>
            <mime:content type="text/xml" part="fnGetccarprogramsummary"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>



public partial class fnGetccarprogramsummaryarrayRequest
{

    public fnGetccarprogramsummaryarrayRequest()
    {
    }
}

其他都是这样的……

    public partial class fnGetccarprogramsummaryRequest
{

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://wrapper.com", Order=0)]
    [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
    public string programAcronym;

    public fnGetccarprogramsummaryRequest()
    {
    }

    public fnGetccarprogramsummaryRequest(string programAcronym)
    {
        this.programAcronym = programAcronym;
    }
}

【问题讨论】:

  • 第一步是缩小问题范围。然后发布仍然导致问题的 WSDL 的最小子集。
  • 但它所指的关键是什么?

标签: wcf wcf-binding wcf-client


【解决方案1】:

WSDL 是从哪里来的?它是如何产生的?

可能是缺少输入和返回类型的定义。

  • fnGetccarprogramsummaryarray
  • fnGetccar 程序摘要。

可能是它试图在类型数组中查找定义但没有找到。

编辑

我认为我发现您有一个 POST 绑定,而该工具仅支持 SOAP 绑定

http://social.msdn.microsoft.com/Forums/en/wcf/thread/859a2c87-02db-469d-ab65-c558ff091e61

不存在的键是 SOAP 绑定。

【讨论】:

  • wsdl 来自另一个公司的站点。我们使用的是常规的 asmx 服务,一切正常,所以我不知道返回类型是否丢失。
  • 您能否在记事本中打开 wsdl 文件并检查类型 fnGet 的定义...另外,在其他站点上实现的服务是哪些技术?
  • 他们正在使用soap..消息级安全性和客户端证书。不确定这是否正是您的意思。好的,我将更新我的问题以显示 fnGetccarprogramsummaryarrayRequest。所有其他 fnGet 都有返回类型或参数。
【解决方案2】:

搜索后.. 我遇到的唯一解决方案是忽略此错误。

"是svcutil的内部实现细节。

该错误可能是因为 wsdl 包含 POST 绑定,而该实用程序仅适用于 SOAP 绑定。但如果 wsdl 中有另一个 SOAP 绑定,它就可以工作。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多