1

COTSアプリケーションからJavaWebサービスを利用する必要があります。私はそれを消費するためにwsdlを取得するだけです。ユーザー名とパスワードを入力する必要があります。以前は、.NET2005WindowsサービスでWSE3.0を使用してそれらを使用していました。Windowsサービスを2010にアップグレードしようとしています。

AddServiceを介してサービスへの参照を追加しました。(会社のポリシーのためにカスタム名とサーバーを変更する必要があったので、構文エラーが発生しないことを願っています。)これが私の最初の投稿であるため、リンクを編集する必要がありました。

アプリの構成にエントリが追加されたことがわかります。

<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="MyServiceSoapBinding">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap12" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>
                <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                    maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
                    bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                    keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                    realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                    useDefaultWebProxy="true" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="htp://servername:1234/webservices/thewebservicename"
            binding="customBinding" bindingConfiguration="MyServiceSoapBinding"
            contract="MyServiceReference.thewebservicename" name="thewebservicenameSoapPort" />
    </client>
</system.serviceModel>

私は最初にBasicHttpBindingを使用してみました:

    Dim Binding As BasicHttpBinding
    Dim Binding As CustomBinding
    Dim EndPoint As EndpointAddress
    Dim etFramework As MyServiceReference.thewebserviceClient
    Dim rsp As MyServiceReference.MethodResponse
    Dim req As MyServiceReference.atkinpovoucherRequest
    Dim rsp1 As MyServiceReference.atkinpovoucherResponse


        Binding = New BasicHttpBinding()
        Binding.Name = "MyServiceSoapBinding"
        Binding.Security.Mode = BasicHttpSecurityMode.Message
        Binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName
        Binding.MessageEncoding = WSMessageEncoding.Mtom
        Binding.ReceiveTimeout = New TimeSpan(0, 5, 0)
        Binding.OpenTimeout = New TimeSpan(0, 5, 0)
        Binding.CloseTimeout = New TimeSpan(0, 5, 0)
        Binding.SendTimeout = New TimeSpan(0, 5, 0)
        ' Set the transport security to UsernameOverTransport for Plaintext usernames
        EndPoint = New EndpointAddress("htp://server:1234/webservices/thewebservice")
        'Create the SOAP Client (and pass in the endpoint and the binding)
        etFramework = New MyServiceReference.thewebserviceClient(Binding, EndPoint)
        ''Set the username and password
        etFramework.ClientCredentials.UserName.UserName = "theusername"
        etFramework.ClientCredentials.UserName.Password = "thepassword"
        req = New MyServiceReference.theservicenameRequest(strXMLToSubmit)
        rsp1 = etFramework.MyServiceReference_thewebservice_theservicename(req)
        Debug.WriteLine(rsp1.ToString())

このエラーが発生します:{"BasicHttpバインディングでは、BasicHttpBinding.Security.Message.ClientCredentialTypeがセキュアメッセージのBasicHttpMessageCredentialType.Certificateクレデンシャルタイプと同等である必要があります。UserNameクレデンシャルにはTransportまたはTransportWithMessageCredentialセキュリティを選択してください。"} System.InvalidOperationException:{"BasicHttpバインディングBasicHttpBinding.Security.Message.ClientCredentialTypeは、セキュアメッセージのBasicHttpMessageCredentialType.Certificateクレデンシャルタイプと同等である必要があります。UserNameクレデンシャルには、TransportまたはTransportWithMessageCredentialセキュリティを選択してください。 "}

セキュリティモードを変更すると、無関心なエラーが発生します(SOAPヘッダーが必要です。httpではなくhttpsが必要です...)

調べてみると、WSHttpBindingを使用する必要があることがわかりました。バインディングを変更するとエラーが発生します:{"応答メッセージのコンテンツタイプtext / xml; charset = utf-8がバインディングのコンテンツタイプと一致しません(multipart / related; type =" application / xop + xml ")カスタムエンコーダーを使用している場合は、IsContentTypeSupportedメソッドが正しく実装されていることを確認してください。応答の最初の373バイトは次のとおりです。ルート要素は、名前空間 "Envelope"'の"htp://www.w3.org/2003/05/soap-envelope"です。 "} System.ServiceModel.ProtocolException:{"コンテンツタイプtext / xml; 応答メッセージのcharset=utf-8が、バインディングのコンテンツタイプ(multipart / related; type = "application / xop + xml")と一致しません。カスタムエンコーダーを使用する場合は、IsContentTypeSupportedメソッドが正しく実装されていることを確認してください。応答の最初の373バイトは次のとおりです。'env:VersionMismatchunableは、名前空間htp://schemas.xmlsoap.org/soap/envelope/でエンベロープを検索します。ルート要素は、名前空間「Envelope」'の「htp://www.w3.org/2003/05/soap-envelope」です。}

さらに調査したところ、app.configのmessageVersion="Soap12"をmessageVersion="Soap11"に変更したところ、同じエラーが発生しました。WSMessageEncodingをTEXTに変更すると、同様のエラーメッセージが表示されます(バインディングはapplication / soap + xmlです)。私がこれについて見つけることができるすべての研究は、Javaの代わりにWCFサービスを消費しているようです。

どんな助けでも大歓迎です!ベッカ

4

0 に答える 0