- PR -

エラー:WS-I Basic Profile v1.1 に準拠していません。 が解決できません。

1
投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2007-03-05 10:49
msoです。


過去の連載記事を元にWebサービスの勉強をしていたところ、
うまく出来ない箇所があります。
対応方法をご存知の方がいらっしゃいましたら、
アドバイスをお願いします。

元の記事
コード:
http://www.atmarkit.co.jp/fdotnet/easyxml/easyxml14/easyxml14_03.html




XMLの記事をコピー&ペーストでひとつずつ動作をさせながら
やっていたところ元の記事(↑のURL)のサンプルが期待通りに
動作をしてくれません。

環境はASP.NET2.0(VS2005)+WindowsXPSP2です。

エラーメッセージ
コード:
'/WebSite20070305' アプリケーションでサーバー エラーが発生しました。
--------------------------------------------------------------------------------

サービス 'Service' が WS-I Basic Profile v1.1 に準拠していません。 次の normative ステートメントの違反を個別に検証してください。整合性チェックを無効にするには、対応する WebServiceBinding 属性の ConformanceClaims プロパティを WsiClaims.None.
R2706: 説明の wsdl:binding では、すべての soapbind:body、soapbind:fault、soapbind:header、および soapbind:headerfault 要素で use 属性の "literal" の値を使用する必要があります。
 -  名前空間 'http://tempuri.org/' の portType 'ServiceSoap' にある操作 GetPerson の input 要素 'soapbind:body' です。
 -  名前空間 'http://tempuri.org/' の portType 'ServiceSoap' で操作 GetPerson の要素 'soapbind:body' を出力します。
整合性を確保するには、'rpc-literal' または 'document-literal' の SOAP メッセージを使用するよう、サービスの実装を変更します。 すべての service 属性および method level 属性 (SoapRpcService、SoapRpcMethod、SoapDocumentService、および SoapDocumentMethod) に明示的な <font class=value>Use=SoapBindingUse.Literal</font> プロパティを追加する必要があります。 に設定します。 
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 

例外の詳細: System.InvalidOperationException: サービス 'Service' が WS-I Basic Profile v1.1 に準拠していません。 次の normative ステートメントの違反を個別に検証してください。整合性チェックを無効にするには、対応する WebServiceBinding 属性の ConformanceClaims プロパティを WsiClaims.None.
R2706: 説明の wsdl:binding では、すべての soapbind:body、soapbind:fault、soapbind:header、および soapbind:headerfault 要素で use 属性の "literal" の値を使用する必要があります。
 -  名前空間 'http://tempuri.org/' の portType 'ServiceSoap' にある操作 GetPerson の input 要素 'soapbind:body' です。
 -  名前空間 'http://tempuri.org/' の portType 'ServiceSoap' で操作 GetPerson の要素 'soapbind:body' を出力します。
整合性を確保するには、'rpc-literal' または 'document-literal' の SOAP メッセージを使用するよう、サービスの実装を変更します。 すべての service 属性および method level 属性 (SoapRpcService、SoapRpcMethod、SoapDocumentService、および SoapDocumentMethod) に明示的な <font class=value>Use=SoapBindingUse.Literal</font> プロパティを追加する必要があります。 に設定します。

ソース エラー: 

現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。  

スタック トレース: 


[InvalidOperationException: サービス 'Service' が WS-I Basic Profile v1.1 に準拠していません。 次の normative ステートメントの違反を個別に検証してください。整合性チェックを無効にするには、対応する WebServiceBinding 属性の ConformanceClaims プロパティを WsiClaims.None.
R2706: 説明の wsdl:binding では、すべての soapbind:body、soapbind:fault、soapbind:header、および soapbind:headerfault 要素で use 属性の "literal" の値を使用する必要があります。
  -  名前空間 'http://tempuri.org/' の portType 'ServiceSoap' にある操作 GetPerson の input 要素 'soapbind:body' です。
  -  名前空間 'http://tempuri.org/' の portType 'ServiceSoap' で操作 GetPerson の要素 'soapbind:body' を出力します。
整合性を確保するには、'rpc-literal' または 'document-literal' の SOAP メッセージを使用するよう、サービスの実装を変更します。 すべての service 属性および method level 属性 (SoapRpcService、SoapRpcMethod、SoapDocumentService、および SoapDocumentMethod) に明示的な <font class=value>Use=SoapBindingUse.Literal</font> プロパティを追加する必要があります。 に設定します。]
   System.Web.Services.Description.ProtocolReflector.ReflectBinding(ReflectedBinding reflectedBinding) +426532
   System.Web.Services.Description.ProtocolReflector.Reflect() +739
   System.Web.Services.Description.ServiceDescriptionReflector.ReflectInternal(ProtocolReflector[] reflectors) +621
   System.Web.Services.Description.ServiceDescriptionReflector.Reflect(Type type, String url) +117
   System.Web.Services.Protocols.DocumentationServerType..ctor(Type type, String uri) +159
   System.Web.Services.Protocols.DocumentationServerProtocol.Initialize() +336
   System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) +99

[InvalidOperationException: 要求を処理できません。]
   System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) +258
   System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +90

[InvalidOperationException: 要求を処理できませんでした。]
   System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +237
   System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +104
   System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +175
   System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +120
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

 


--------------------------------------------------------------------------------
バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.42; ASP.NET バージョン:2.0.50727.210 




ネットで調査をしたところWeb.Configに
コード:
  <webServices>
    <conformanceWarnings>
      <remove name='BasicProfile1_1'/>
    </conformanceWarnings>
  </webServices>


を追加すると大丈夫というようなことを見つけましたが、
実際にやってみたところダメでした。

ほかに何をやればよいでしょうか?
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2007-03-05 15:32
msoです。

自己レスです。

コード:
    [WebMethod][SoapDocumentMethod(Action="http://www.contoso.com/sample",
        RequestNamespace="http://www.contoso.com/Request",
        RequestElementName="GetUserNameRequest",
        ResponseNamespace="http://www.contoso.com/Response",
        ResponseElementName="GetuserNameResponse")]
    public Person GetPerson()
    {
        Person person = new Person();
        person.Name = "山田太郎";
        person.Age = 17;
        person.SetTemporaryID(DateTime.Now.ToString());
        return person;
    }




MSDNのヘルプを見ながらとりあえず動かせるようにはなりました。
ただ、連載の内容とはまだ一致しません。
もう少し時間を見つけながら、調査を行いたいと思います。

引き続き、何かアドバイスをしていただけるのであれば
お願いします。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2007-03-05 17:12
Webサービスクラスには以下のような属性が最初から付加されていると思いますが、
これを削除すると、正常に動作しました。

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

document/encoded, rpc/encodedはBasic Profile 1.1に準拠していないので
Webメソッドにdocument/encodedを適用する場合、この属性を取り除く必要があるようです。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2007-03-06 10:08
msoです。


引用:

よこけんさんの書き込み (2007-03-05 17:12) より:
Webサービスクラスには以下のような属性が最初から付加されていると思いますが、
これを削除すると、正常に動作しました。

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

document/encoded, rpc/encodedはBasic Profile 1.1に準拠していないので
Webメソッドにdocument/encodedを適用する場合、この属性を取り除く必要があるようです。



ありがとうございます。
指示していただいた方法で、期待通りの動作をする
ことを確認しました。
1

スキルアップ/キャリアアップ(JOB@IT)