当前位置: 首页 > 面试题库 >

是否可以从SOAP信封确定WCF绑定配置?

方奕
2023-03-14
问题内容

我已经从WSDL文件生成了WCF客户端服务代理,该文件调用了第三方Java Web服务。现在,我需要配置绑定和代理来调用Web方法。

但是,我只有以下SOAP信息,用户名和密码以及客户端证书。我该如何解决需要做的事情?

是否有任何“反向配置”应用程序或教授所需技能的网站?

我想我的意思是“消息的这一部分转换为这种配置”。有人可以帮忙吗?

对于同一个项目,我问了这个问题,所以如果有人知道向第三方要什么,那也会有所帮助(我将其描述为“通信信息”,但我认为不够具体) 。

    <env:Envelope xmlns:env=http://schemas.xmlsoap.org/soap/envelope/xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="http://etis.ford.com/services/fsa/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <env:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" env:mustUnderstand="1">
        <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-messagesecurity-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="token-2-1172677451503-9243153">MIICDTCC……..k/j8lARlQ==</wsse:BinarySecurityToken>
        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <ds:Reference URI="#element-1-1172677451465-2619907">
        <ds:Transforms>
            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <ds:DigestValue>k_REDACTED_=</ds:DigestValue>
        </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>k_REDACTED_=</ds:SignatureValue>
        <ds:KeyInfo>
        <wsse:SecurityTokenReference wsu:Id="reference-3-1172…..1504-94…25">
        <wsse:Reference URI="#token-2-117…..51503-9…3" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference>
        </ds:KeyInfo>
        </ds:Signature>
        </wsse:Security>
    </env:Header>
    <env:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"wsu:Id="element-1-1172677451465-2619907">
        <ns0:list>
            <String_1>k_REDACTED_</String_1>
        </ns0:list>
    </env:Body>
    </env:Envelope>

以下内容已生成到我的app.config中。它没有例外,但是我得到的响应(格式正确的XML)包含“无”的对象-实际响应看起来像我发送的内容的镜像。

<bindings>
    <basicHttpBinding>
        <binding name="MyBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
            receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                    realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>
<client>
    <endpoint address="http://myurl"
        binding="basicHttpBinding" bindingConfiguration="MyBinding"
        contract="wsServiceProxy.ServiceName" name="MyServicePort" />
</client>

请求:

POST http://www.thehost.com/
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo2dteAUjcNNDmQ28Qhsz8KcAAAAARUELWtvXc06cOf2eOs23AWKlzgCLFBNImUOop7Ho+PoACQAA
SOAPAction: ""
Host: www.thehost.com
Content-Length: 299
Expect: 100-continue
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <list xmlns="http://thehost.com">
            <String_1 xmlns="">MyString</String_1>
        </list>
    </s:Body>
</s:Envelope>

响应:

HTTP/1.1 200 OK
Date: Thu, 24 Oct 2013 14:17:20 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/1.0.0a mod_jk/1.2.31
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
VsDebuggerCausalityData: uIDPo2dteAUjcNNDmQ28Qhsz8KcAAAAARUELWtvXc06cOf2eOs23AWKlzgCLFBNImUOop7Ho+PoACQAA
SOAPAction: ""
host: www.thehost.com
Expect: 100-continue
connection: Keep-Alive, Keep-Alive
Content-Length: 299
Keep-Alive: timeout=2, max=100
Content-Type: text/xml;charset=utf-8

<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>
    <s:Body xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
        <list xmlns='http://thehost.com'>
            <String_1 xmlns=''>MyString</String_1>
        </list>
    </s:Body>
</s:Envelope>

问题答案:

使用此自定义绑定:

<customBinding>
        <binding name="NewBinding0">
            <textMessageEncoding messageVersion="Soap11" />
            <security authenticationMode="MutualCertificate" includeTimestamp="false"
                messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
                <secureConversationBootstrap />
            </security>
            <httpTransport />
        </binding>
</customBinding>

确保将您的合同装饰为仅签署:

[System.ServiceModel.ServiceContractAttribute(ConfigurationName=..., ProtectionLevel=System.Net.Security.ProtectionLevel.Sign)]

除了客户端证书之外,您还需要配置服务证书。您(可能)没有这样的证书,可以在其中配置任何虚拟证书(甚至与客户端相同)。



 类似资料:
  • 问题内容: 我想将所有内容都保留在virtualenv中。OpenCV有可能吗?我可以从头开始构建,我是否只需要先设置virtualenv,然后使用特殊的编译标志告诉它安装在哪里? 问题答案: 我发现解决方案是必须将cv2.so和cv.py复制到运行virtualenv的目录,然后pip install numpy。为此,我使用了Ubuntu12.04。

  • web服务提供者共享了soap消息的原始xml以突出显示ws-security头。使用soapUI,我已经能够创建完全相同的wsse-Security头,如下所示: 在soapUI中,在“WS-Security Configurations”下,我添加了密钥库(带有我的私有证书的jks)和信任库(带有CA根公钥的jks)。最后,我添加了带有以下设置的“传出WS-Security配置”。 使用此WS

  • 问题内容: 我凭经验发现 绑定到当前计算机上的所有网络接口(而不仅仅是localhost-127.0.0.1或主机名),但是我无法找到说明这是可以保证的文档。 问题:在Java中绑定到0.0.0.0的定义将始终绑定到所有网络接口? 问题答案: 使用将仅绑定到启用IPv4的接口。但是,如果绑定到,则假定您的TCP / IP堆栈(和Java)启用了IPv4兼容的IPv6套接字,则该协议应涵盖所有IPv

  • 问题内容: 我正在尝试确定给定类型()是否为可选类型,我正在使用此测试 但它始终返回false。 那么有什么办法可以做到这一点? 问题答案: 假设您要执行的操作是这样的: 可悲的是,swift当前(从Swift 2开始)不支持协方差和协变,并且不能直接针对类型进行类型检查: 一种替代方法是使特定协议扩展,并检查该类型:

  • 来自以下来源: https://www.amazon.com/java-complete-reference-herbert-schildt/dp/0071808558 第8章:在继承中使用final 对于私有、静态、最终方法,应该使用早期(静态)方法绑定 所以正如我所认为的,这两个方法应该有不同的绑定类型。检查字节码: 在这里我看到了两个有害的指示。那么有什么方法可以确定类字节码使用了哪种绑定呢

  • 我想在foreach内部的模型中传递一个数组的范围。 我重新创建了一个示例: 周围的工作 我发现是传递所有的列表,并在子视图内部执行范围。但我不想这样做,因为数组非常大: