- PR -

呼び出されたWebMethod名を取得するには

投稿者投稿内容
ZOO
会議室デビュー日: 2004/10/21
投稿数: 7
投稿日時: 2004-10-21 11:37
初めて書き込みさせていただきます。
.Net 2ヶ月の初心者です。

現在WindowsXP, VisualStadio2003, C#の環境で
WebServiceの開発をしております。

リクエストを受け付けたWebService上で
呼び出されたWebMethod名を取得したいのですが、
どのように取得すればよいでしょうか。

お忙しいところ申し訳ありませんが、
ご存知のかたいらっしゃいましたら、
ご教授お願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-10-21 12:58
Context.Request.Url.ToString() から拾えます。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-21 13:26
南部です。

-- ヘルプ引用 
SoapRpcMethodAttribute または SoapDocumentMethodAttribute の OneWay プロパティが true に設定されている XML Web サービス メソッドは、その HttpContext へのアクセス権がありません。
------------

これだけ気をつければいいのかな。
ZOO
会議室デビュー日: 2004/10/21
投稿数: 7
投稿日時: 2004-10-21 13:41
todo様
返信ありがとうございます。
早速Request.Urlからメソッド名が拾えるか試してみました。
残念ならがら、呼び出されたasmxファイル名までは
取れるのですが、WebMethod名までは表示されませんでした。
Global.aspx.Application_BeginRequest()とWebMethod名の中で
取得を試みてみました。
やはりWebMethod名は取れないのでしょうか。

nanbu様
返信ありがとうございます。
今のところContextにアクセスしてもエラーは発生しておりませんので、
設定自体は間違えてないかと思われます。
2つのSoapMethodの違いについてあまり知識がありませんので、
これを機に勉強させていただきます。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-10-21 15:02
>早速Request.Urlからメソッド名が拾えるか試してみました。
>残念ならがら、呼び出されたasmxファイル名までは
>取れるのですが、WebMethod名までは表示されませんでした。

ブラウザでテストするとWebMethod名まで分かるが、Webサービスとプロトコルが違うのね。
ブラウザがHTTP POSTで、WebサービスはSOAPでした。

>やはりWebMethod名は取れないのでしょうか。

私も知りたいです。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-21 18:29
南部です。

引用:

ZOOさんの書き込み (2004-10-21 13:41) より:
取れるのですが、WebMethod名までは表示されませんでした。
Global.aspx.Application_BeginRequest()とWebMethod名の中で
取得を試みてみました。



呼ばれたメソッド内で、自分のメソッド名が知りたいのであれば、
new System.Diagnostics.StackFrame().GetMethod().Name
で取れますが。

#WebMethod名って別のものを指してます?
ZOO
会議室デビュー日: 2004/10/21
投稿数: 7
投稿日時: 2004-10-21 19:01
nanbu様

返信ありがとうございます。
おっしゃられるとおり実行してみたところ、
メソッドの中であれば実行中メソッド名を取得することができました。

しかし、今回の要件はWebメソッドごとに実行権限を付与(仮想的に)し、
呼び出された時に実行権限があるユーザーなのかチェックするというものでして、
できればWebMethodに入ってしまう前にチェックを行いたいところです。
そのため、Request情報を中心に調査をしておりました。

nanbuさんが紹介してくださった方法でも、要件は満たせそうなので、
他に方法が見つかりませんでしたら、使わせていただきます。

お忙しいところ、情報ありがとうございました。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-21 21:49
南部です。

Global.asaxのApplication_BeginRequestで取れるものですね。

Context.Request.Headers["SOAPAction"]に
"http://tempuri.org/HelloWorld"
こんなのが入っていたりして。


[ メッセージ編集済み 編集者: nanbu 編集日時 2004-10-21 21:53 ]

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