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サービスを消費しているようです。
どんな助けでも大歓迎です!ベッカ