<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>WCF</title><link>http://blogs.wankuma.com/trapemiya/category/2108.aspx</link><description>WCF</description><managingEditor>trapemiya &lt;miya.hideki@nifty.com&gt;</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>trapemiya &lt;miya.hideki@nifty.com&gt;</dc:creator><title>【WCF】ServiceHostとClinetBaseのIDisposableにご注意を！</title><link>http://blogs.wankuma.com/trapemiya/archive/2009/03/12/169562.aspx</link><pubDate>Thu, 12 Mar 2009 12:05:00 GMT</pubDate><guid>http://blogs.wankuma.com/trapemiya/archive/2009/03/12/169562.aspx</guid><wfw:comment>http://blogs.wankuma.com/trapemiya/comments/169562.aspx</wfw:comment><comments>http://blogs.wankuma.com/trapemiya/archive/2009/03/12/169562.aspx#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://blogs.wankuma.com/trapemiya/comments/commentRss/169562.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/trapemiya/services/trackbacks/169562.aspx</trackback:ping><description>&lt;P&gt;WCFとUsingブロックの問題&lt;BR&gt;&lt;A href="http://www.infoq.com/jp/news/2009/03/WCF-Dispose"&gt;http://www.infoq.com/jp/news/2009/03/WCF-Dispose&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;知らなかった。orz&lt;/P&gt;
&lt;P&gt;どうやらマーカーインターフェースとしての意味合いを最優先させて、ServiceHostとClinetBaseにはIDisposableを残したようなんですが、これだと普通にUsing()句を使っちゃいますよね。Using()句を使えないならIDisposableを実装すべきじゃないと思うんですけどね・・・。&lt;BR&gt;Using()句は使っちゃダメっていう意味で、IDisposableNoUsingみたいなインターフェースを新設するとか。(^^;&lt;/P&gt;
&lt;P&gt;この件の参考として、以下がわかりやすいです。&lt;/P&gt;
&lt;P&gt;Using ステートメントに関する問題の回避&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/aa355056.aspx"&gt;http://msdn.microsoft.com/ja-jp/library/aa355056.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/trapemiya/aggbug/169562.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>trapemiya &lt;miya.hideki@nifty.com&gt;</dc:creator><title>【WCF】VS2008のWCFテストクライアントがWCFサービスを自動的に見つけてくれない。</title><link>http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167915.aspx</link><pubDate>Tue, 10 Feb 2009 15:38:00 GMT</pubDate><guid>http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167915.aspx</guid><wfw:comment>http://blogs.wankuma.com/trapemiya/comments/167915.aspx</wfw:comment><comments>http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167915.aspx#Feedback</comments><slash:comments>41</slash:comments><wfw:commentRss>http://blogs.wankuma.com/trapemiya/comments/commentRss/167915.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/trapemiya/services/trackbacks/167915.aspx</trackback:ping><description>&lt;p&gt;前回&lt;/p&gt; &lt;p&gt;【WCF】 VS2008のテンプレートで作成したWCFサービスライブラリは、なぜ管理者権限で動作させなくても良いのか？&lt;br&gt;&lt;a href="http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167913.aspx"&gt;http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167913.aspx&lt;/a&gt; &lt;p&gt;と同様に、VS2008でWCFサービステンプレートを使用せずにWCFサービスを作成した時の話です。&lt;/p&gt; &lt;p&gt;前回、netshコマンドを使って無事にWCFサービスホストおよびWCFテストクライアントが自動で起動するようになったのだが、WCFテストクライアントが以下のメッセージを出して自動的にWCFサービスを見つけてくれない。&lt;/p&gt; &lt;p&gt;「WCF Service Host cannot find any service metadata」&lt;/p&gt; &lt;p&gt;ちなみにmexを公開しているurlを手動で入力してサービスを追加すると、問題なく追加される。どうやら、WCFテストクライアントがサービスを見つけられないだけのようだ。&lt;/p&gt; &lt;p&gt;なぜだろう？　mexのエンドポイントがいるのかと思って追加してみたが効果なし。どうやら関係ないようだ。&lt;/p&gt; &lt;p&gt;いろいろ試した結果、解決した。App.configに&amp;lt;BaseAddresses&amp;gt;が必要だったのだ。&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0b6cf572-f2e3-429b-b4b4-518bebd3c278" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml"&gt;  &amp;lt;services&amp;gt;
      &amp;lt;service behaviorConfiguration="NewBehavior" name="HogeHogeService.Service1"&amp;gt;
        &amp;lt;host&amp;gt;
          &amp;lt;baseAddresses&amp;gt;
            &amp;lt;add baseAddress = "http://localhost:8000/HogeHogeService/" /&amp;gt;
          &amp;lt;/baseAddresses&amp;gt;
        &amp;lt;/host&amp;gt;
                   ・
                   ・
                   ・
    &amp;lt;/services&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;どうやらWCFテストクライアントは、&amp;lt;BaseAddresses&amp;gt;に書かれたベースアドレスを元にWCFサービスを自動的に探しているようだ。&amp;lt;BaseAddresses&amp;gt;がないとどこを探していいのかわからず、上記のエラーメッセージを出していたのだろう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/trapemiya/aggbug/167915.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>trapemiya &lt;miya.hideki@nifty.com&gt;</dc:creator><title>【WCF】 VS2008のテンプレートで作成したWCFサービスライブラリは、なぜ管理者権限で動作させなくても良いのか？</title><link>http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167913.aspx</link><pubDate>Tue, 10 Feb 2009 15:08:00 GMT</pubDate><guid>http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167913.aspx</guid><wfw:comment>http://blogs.wankuma.com/trapemiya/comments/167913.aspx</wfw:comment><comments>http://blogs.wankuma.com/trapemiya/archive/2009/02/10/167913.aspx#Feedback</comments><slash:comments>93</slash:comments><wfw:commentRss>http://blogs.wankuma.com/trapemiya/comments/commentRss/167913.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/trapemiya/services/trackbacks/167913.aspx</trackback:ping><description>&lt;P&gt;以下、vistaでのお話です。そう、管理者権限ってやつですね。&lt;/P&gt;
&lt;P&gt;VS2008のWCFサービスライブラリというテンプレートからWCFサービスを作成し、F5（デバッグ開始）を押して動作させると、何の問題もなくWCFサービスホストが起動し、WCFテスト用クライアントが自動的にWCFサービスを見つけてくれる。&lt;BR&gt;ところが、テンプレートを使わずに自力でプロジェクトを作成した場合は、以下のメッセージが出てWCFサービスホストがエラー状態で起動してしまう。&lt;/P&gt;
&lt;P&gt;「HTTP は URL http://+:8000/HogehogeService/ を登録できません。プロセスにこの名前空間へのアクセス権がありません」&lt;/P&gt;
&lt;P&gt;これを解決するには、VS2008を管理者権限で実行すれば良いと以下に書いてある。&lt;/P&gt;
&lt;P&gt;チュートリアル入門のトラブルシューティング&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb924513.aspx"&gt;http://msdn.microsoft.com/ja-jp/library/bb924513.aspx&lt;/A&gt; 
&lt;P&gt;確かにこれでうまく行く。でもちょっと待てよ。WCFサービスライブラリのテンプレートから作成したプロジェクトは管理者権限で実行しなくてもうまく動くじゃない。なぜ？　と思ったあなたは偉い！　自分は思った。（自画自賛かw）&lt;/P&gt;
&lt;P&gt;でさらに調べてみると、上記のリンク先に以下のように書いてある。&lt;/P&gt;
&lt;P&gt;「詳細については、「&lt;A href="http://go.microsoft.com/fwlink/?LinkId=70353"&gt;HTTP および HTTPS の構成&lt;/A&gt;」を参照してください」&lt;/P&gt;
&lt;P&gt;というわけでそこを見ると、以下のように書いてある。&lt;/P&gt;
&lt;P&gt;「&lt;BR&gt;Running Windows Vista&lt;/P&gt;
&lt;P&gt;If you are running on Windows Vista, you can use the Netsh.exe tool instead. The following shows an example of using this command. 
&lt;P&gt;netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user&lt;BR&gt;」 
&lt;P&gt;あと、 
&lt;P&gt;WCF 開発ツールの使用&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb552361.aspx"&gt;http://msdn.microsoft.com/ja-jp/library/bb552361.aspx&lt;/A&gt; 
&lt;P&gt;にも以下のように書いてある。&lt;/P&gt;
&lt;P&gt;｢&lt;BR&gt;管理者特権を必要としないツールの使用&lt;/P&gt;
&lt;P&gt;管理者特権のないユーザーが WCF サービスを開発できるようにするために、Visual Studio のインストール時には、名前空間 "http://+:8731/Design_Time_Addresses" に対してアクセス制御リスト (ACL: Access Control List) が作成されます。この ACL は (UI) に設定され、コンピュータにログオンしているすべての対話ユーザーが含まれます。管理者は、この ACL にユーザーを追加または削除したり、追加のポートを開いたりできます。この ACL によって、既定の構成で、WCF テンプレートまたは WF テンプレートでデータを送受信できるようになります。また、ユーザーは、管理者特権が付与されていなくても、WCF サービスの自動ホスト (wcfSvcHost.exe) を使用できるようになります。 
&lt;P&gt;システム特権のある管理者アカウントで Windows Vista の Netsh.exe ツールを使用すると、アクセスを変更できます。Netsh.exe の使用例を次に示します。 
&lt;P&gt;netsh http add urlacl url=http://+:8001/MyService user=&lt;DOMAIN&gt;\&lt;USER&gt; 
&lt;P&gt;Netsh.exe 詳細については、 、「&lt;A href="http://go.microsoft.com/fwlink/?LinkId=97877"&gt;Netsh.exe ツールとコマンド ライン スイッチの使用方法&lt;/A&gt;」を参照してください。&lt;BR&gt;｣ 
&lt;P&gt; 
&lt;P&gt;なるほど。特定のユーザーに特定のポートへのアクセスを許可すれば良いのね。というわけで、コマンドプロンプトを管理者権限で実行し、以下のコマンドを打って解決した。 
&lt;P&gt;C:\Windows\system32&amp;gt;netsh http add urlacl url=http://+:8000/HogeHogeService user=Fuga\MogeUser 
&lt;P&gt;「URL 予約を正常に追加しました」 
&lt;P&gt;と表示されればＯＫ。どうてもいいけど「追加しました」の後に句点（。）はない。 
&lt;P&gt;ちゃんと登録されたかどうか、一応、以下のコマンドで確かめてみよう。 
&lt;P&gt;C:\Windows\system32&amp;gt;netsh http show urlacl 
&lt;P&gt;ちなみに間違えて登録しちゃった場合は、以下のようにして消せる。 
&lt;P&gt;C:\Windows\system32&amp;gt;netsh http delete urlacl url=http://+:8000/HogeHogeService 
&lt;P&gt;｢URL 予約を正常に削除しました｣ 
&lt;P&gt;と表示されればＯＫ。どうてもいいけど「追加しました」の後に句点（。）はない。（天丼かw） 
&lt;P&gt;ところで、http://+:8000みたいに書いてたけど、+って何だろう？　Strong Wildcardのようですね。 
&lt;P&gt;UrlPrefix Strings&lt;BR&gt;&lt;A title=http://msdn.microsoft.com/ja-jp/library/aa364698(en-us,VS.85).aspx href="http://msdn.microsoft.com/ja-jp/library/aa364698(en-us,VS.85).aspx"&gt;http://msdn.microsoft.com/ja-jp/library/aa364698(en-us,VS.85).aspx&lt;/A&gt;
&lt;P&gt;で、ようやく結論。タイトルの&lt;BR&gt;「VS2008のテンプレートで作成したWCFサービスライブラリは、なぜ管理者権限で動作させなくても良いのか？」&lt;BR&gt;の答えは、上記でnetshを使ってURL予約を作成したように、VS2008が自動でURL予約を作成してくれているからのようです。&lt;BR&gt;netsh http show urlacl &lt;BR&gt;でURL予約の一覧を表示してみると、その中にちゃっかり作成されているのを確認することができました。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/trapemiya/aggbug/167913.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>