2011-10-19 4 views
0

私はシンプルなwcfサービスを開発しており、互換性の理由からSoapとして公開しようとしています。クライアントは素晴らしいActionScriptを備えたFlashアプリケーションになります。soapとしてのWcf:クライアントに依存するさまざまな問題

私は明らかにsoap互換のWSDLを生成するためにbasicHttpBindingを使用しています。ここで

は(当然の機密データの匿名化)私の設定に従います。

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="soapBinding" /> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="BasicBehavior" name="MyCustomer.MyProject.WebService.MyService"> 
    <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" /> 
    <endpoint binding="basicHttpBinding" bindingConfiguration="soapBinding" 
     name="Basic" bindingNamespace="http://myurl" 
     contract="MyCustomer.MyProject.WebService.IMyService"> 
    </endpoint> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://myurl" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="BasicBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

それは実際にはかなり簡単です。現在、フラッシュアプ​​リケーションを開発している人は、唯一のメソッド(ValidateFormと呼ばれています)を見ているが、パラメータリストが表示されていないというトラブルがあると述べています。

私は次のことを試してみました:

  • 嵐(storm.codeplex.com)を使用してWebサービスを呼び出す:慎重:嵐ではなく、WCFの嵐を。 Stormは通常のWebサービスでのみ動作し、ネイティブWCFモードでは接続できません。これは正常に動作します。私はパラメータを見て、それらを埋めることができ、正しい応答を呼び出して受け取ります。
  • http://soapclient.com/soaptest.htmlでサービスを呼び出す:wsdlが読み込まれ、パラメータリストが表示されますが、「予期しないエラー」が発生したときに発生します。
  • http://www.validwsdl.com/を使用してWebサービスを呼び出す:これはwsdlを読み取りますが、パラメータリストはまったく表示されず、呼び出しは失敗します。

私のサービスには明らかに問題があります。ここでWSDLを次の、多分誰かが(再び匿名化)間違っているものを私に伝えることができます:

<wsdl:definitions name="mycustomermyprojectService" targetNamespace="http://www1.myproject.mydomain.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://www1.myproject.mydomain.com" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"> 
    <wsdl:types> 
    <xsd:schema targetNamespace="http://www1.myproject.mydomain.com/Imports"> 
     <xsd:import schemaLocation="http://www1.myproject.mydomain.com/?xsd=xsd0" namespace="http://www1.myproject.mydomain.com"/> 
     <xsd:import schemaLocation="http://www1.myproject.mydomain.com/?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/> 
     <xsd:import schemaLocation="http://www1.myproject.mydomain.com/?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/mycustomer.myproject.WebService.Models"/> 
    </xsd:schema> 
    </wsdl:types> 
    <wsdl:message name="ImycustomermyprojectService_ValidateForm_InputMessage"> 
    <wsdl:part name="parameters" element="tns:ValidateForm"/> 
    </wsdl:message> 
    <wsdl:message name="ImycustomermyprojectService_ValidateForm_OutputMessage"> 
    <wsdl:part name="parameters" element="tns:ValidateFormResponse"/> 
    </wsdl:message> 
    <wsdl:portType name="ImycustomermyprojectService"> 
    <wsdl:operation name="ValidateForm"> 
     <wsdl:input wsaw:Action="http://www1.myproject.mydomain.com/ImycustomermyprojectService/ValidateForm" message="tns:ImycustomermyprojectService_ValidateForm_InputMessage"/> 
     <wsdl:output wsaw:Action="http://www1.myproject.mydomain.com/ImycustomermyprojectService/ValidateFormResponse" message="tns:ImycustomermyprojectService_ValidateForm_OutputMessage"/> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="Basic" type="tns:ImycustomermyprojectService"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="ValidateForm"> 
     <soap:operation soapAction="http://www1.myproject.mydomain.com/ImycustomermyprojectService/ValidateForm" style="document"/> 
     <wsdl:input> 
     <soap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="mycustomermyprojectService"> 
    <wsdl:port name="Basic" binding="tns:Basic"> 
     <soap:address location="http://www1.myproject.mydomain.com/"/> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

誰でもいくつかの光を当てることができますか?ありがとう。

答えて

1

他のプラットフォームではインポート属性を理解できないため、wsdlをフラット化する必要があるというシナリオがあります。

あなたは、あなたがリンクで説明したように、あなたのWSDLを平らに独自のサービスホストファクトリを作成する必要があり、次のlink

であなたのWSDLを平らにする方法についていくつかの情報を見つけることができます。これは、私が間違っていない場合、.NET 4.5で進められる組み込み機能になります。その情報はこちらで確認できますlink

0

このwsdlには実際に直接タイプはありません。 xsd:import宣言の他の場所(例:http://www1.myproject.mydomain.com/?xsd=xsd0)からインポートされます。パーサーはこれらのインポートに従って解析する必要があります。私はvalidWSDL.comがこれを行うかどうかわかりません。呼び出すときに私は自分のサービスやエラーでそれをしてみましません:

「WSDL文書の要素内に見つかりませ一致する 『要素』定義」あなたがトラブルを抱えている場合一部のクライアントでは、それらのファイルに直接定義されているスキーマでインポートを置き換えることができます。ここをクリックしてwsdl element identifiersのように見えます。私はまだ経験していないので、これが原因であるとは保証できませんが、validwsdl.comで試してみて、動作するかどうか確認することができます。テストが容易でなければなりません。

+0

私は調査を続けており、これは本当に問題だと思われます。私は、WCFのinteropに関するいくつかの "Wsdl Flattening"トピックに出くわしました。私はまだ実験中です。私がそれを作るなら、私は自分の問題に解決策を投稿しています。 –

関連する問題