发布为wcf添加服务引用的问题

时间:2010-09-17 14:41:40

标签: wcf wcf-binding wcf-client

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;
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

  • fnGetccarprogramsummaryarray
  • fnGetccarprogramsummary。

可能是它试图在类型数组中查找定义而不是找到它。

修改

我认为我发现你有一个POST绑定,该工具只支持SOAP绑定

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

不存在的密钥就是SOAP绑定。

答案 1 :(得分:0)

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

“这是svcutil的内部实现细节。

错误可能是因为wsdl包含POST绑定,并且utlity仅适用于SOAP绑定。但是如果在wsdl中有另一个SOAP绑定,它就可以工作。“