none
チュートリアルに出ている WCF サービスは自己ホストに書き換えるべきでは? RRS feed

  • 全般的な情報交換

  • WCF を学習しています。

     

    WCF のドキュメントを一通り読み、


    - チュートリアル : n 層データ アプリケーションの作成


    を参考に WCF の実装を進めました。ここで一旦、開発環境 "" で確認して

    みようと考えています。


    IDE を使っていると、上記チュートリアルの実行時に "WcfSvcHost" が使われ
    てしまいます。


    - WCF サービス ホスト (WcfSvcHost.exe)
    - 基礎: Visual Studio 2008 の WCF 向け新機能


    によると、開発向けのツールなので、実運用では使ってはいけないと思います。
    ですので、チュートリアル中の WCF サービスを「自己ホスト」や「Windows

    サービス」に書き換える必要があると感じています。

     

    読み込みが足りないのですかねぇ? チュートリアルのままだと、開発環境外で、

    WCF サービスは立ち上がらないような気がするのですが。


    どうなんでしょう? それとも何か別手段があるのでしょうか?

    2008年4月17日 5:07

すべての返信

  •  custar さんからの引用

    チュートリアル中の WCF サービスを「自己ホスト」や「Windows サービス」に書き換える必要があると感じています。

     

    チュートリアルのままだと、開発環境外で、WCF サービスは立ち上がらないような気がするのですが。

     

    チュートリアル(学習)ですから目的があります。

    それから外れていれば問題ですが、そうでないなら問題ないのではと思います。

     

    というより、サービス指向により構成ファイルの変更だけでサービスの位置を簡単に変えることができるのが大きな利点ですし

    そこをおさえておく必要があります。

    ですから、例のチュートリアルはn層が主目的ですので、ある意味問題視されている部分はどうでもよいというか

    別の独立したチュートリアルになっていることと思います。

     

    例のツールですが、2008の新機能ですよね?

    2005で開発中の私にとっては便利なものができたという感想です。

    先に書いたように、サービス指向なのでホストの形態はあまり関係がありません。

    そういう意味ではテスト用のWindowsアプリホストのプロジェクトをわざわざ作って利用している現状からすると

    もっと早く出てたらよかったのに、といったところです。

     

    2008年4月17日 7:48
  • まどか さん、返信ありがとうございます。


     まどか さんからの引用

    ですから、例のチュートリアルは n層が主目的ですので、ある意味問題視され
    ている部分はどうでもよいというか別の独立したチュートリアルになっている
    ことと思います。


    タイトルが悪かったかな。

     

    チュートリアルがおかしいということではなく、

     

    チュートリアルから少しずつ自分の都合に合う形に変更していこうとしており、
    そうする場合、チュートリアルの設定から自己ホストか Windows サービスへの
    設定の変更が必要になりますよね?という確認を兼ねた質問でした。


     まどか さんからの引用

    サービス指向により構成ファイルの変更だけでサービスの位置を簡単に変える
    ことができるのが大きな利点ですしそこをおさえておく必要があります。


    この「設定ファイルの変更」としてチュートリアルの構成から何をすれば実環
    境で使えるようになるのか、まだピンと来ていません。

     

     


     まどか さんからの引用

    例のツールですが、2008の新機能ですよね?


    そのようです。私は Professional 試用中です。


     まどか さんからの引用

    2005で開発中の私にとっては便利なものができたという感想です。


    使い始めたばかりなので実感がありませんが、使い込んでいる方からすると
    「便利」なんですね。


     まどか さんからの引用

    先に書いたように、サービス指向なのでホストの形態はあまり関係がありません。


    サービル利用側からしたら、ホストの形態は関係ない、てことですね。
    まぁ、そうですね。情報さえもらえたらいいのですから。


     まどか さんからの引用

    そういう意味ではテスト用の Windows アプリホストのプロジェクトをわざわざ
    作って利用している現状からするともっと早く出てたらよかったのに、といっ
    たところです。


    おいおい私も実感するのでしょう。

    2008年4月17日 9:26
  • こんなことを言い出した切っ掛けは、チュートリアルのサンプルを Ctrl-F5 で
    実行させたら、


    図 (1)


    のようなメッセージが出たからです。その内容を下記「メッセージ一覧」に示
    しています。

     

    チュートリアルに書かれたままを実行しているだけですので、

    何のことなのかさっぱり分からずな状況です。

     


    メッセージ一覧

    Code Snippet

    Just-In-Time (JIT) デバッグを呼び出すための詳細については、
    ダイアログ ボックスではなく、このメッセージの最後を参照してください。

    ************** 例外テキスト **************
    System.ServiceModel.EndpointNotFoundException:
    http://localhost:8731/Design_Time_Addresses/DataService/Service1/SyncServer に接続できませんでした。
    TCP エラー コード 10061: 対象のコンピュータによって拒否されたため、接続できませんでした。 127.0.0.1:8731。
    ---> System.Net.WebException: リモート サーバーに接続できません。
    ---> System.Net.Sockets.SocketException: 対象のコンピュータによって拒否されたため、接続できませんでした。 127.0.0.1:8731
       場所 System.Net.Sockets.Socket.DoConnect()
       場所 System.Net.Sockets.Socket.InternalConnect()
       場所 System.Net.ServicePoint.ConnectSocketInternal()
       --- 内部例外スタック トレースの終わり ---
       場所 System.Net.HttpWebRequest.GetRequestStream()
       場所 System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()
       --- 内部例外スタック トレースの終わり ---

    Server stack trace:
       場所 ServiceModel.Security.IssuanceTokenProviderBase`1.DoNegotiation()
       場所 ServiceModel.Security.SspiNegotiationTokenProvider.OnOpen()
       場所 ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen()
       場所 ServiceModel.Channels.CommunicationObject.Open()
       場所 ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open()
       場所 ServiceModel.Security.SecurityUtils.OpenCommunicationObject()
       場所 ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired()
       場所 ServiceModel.Security.SymmetricSecurityProtocol.OnOpen()
       場所 ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen()
       場所 ServiceModel.Channels.CommunicationObject.Open()
       場所 ServiceModel.Security.SecurityProtocol.Open()
       場所 ServiceModel.Channels.SecurityChannelFactory`1.ClientSecurityChannel`1.OnOpen()
       場所 ServiceModel.Channels.CommunicationObject.Open()
       場所 ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation()
       場所 ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore()
       場所 IdentityModel.Selectors.SecurityTokenProvider.GetToken()
       場所 ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen()
       場所 ServiceModel.Channels.CommunicationObject.Open()
       場所 ServiceModel.Channels.ServiceChannel.OnOpen()
       場所 ServiceModel.Channels.CommunicationObject.Open()
       場所 ServiceModel.Channels.ServiceChannel.CallOpenOnce.ServiceModel.Channels.ServiceChannel.ICallOnce.Call()
       場所 ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce()
       場所 ServiceModel.Channels.ServiceChannel.EnsureOpened()
       場所 ServiceModel.Channels.ServiceChannel.Call()
       場所 ServiceModel.Channels.ServiceChannel.Call()
       場所 ServiceModel.Channels.ServiceChannelProxy.InvokeService()
       場所 ServiceModel.Channels.ServiceChannelProxy.Invoke()

    Exception rethrown at [0]:
       場所 Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage()
       場所 Runtime.Remoting.Proxies.RealProxy.PrivateInvoke()
       場所 PresentationTier.ServiceReference1.IService1.GetCustomers()
       場所 PresentationTier.ServiceReference1.Service1Client.GetCustomers() 場所 C:\Documents and Settings\custar\My Documents\Visual Studio 2008\Projects\SandBoxes\NTierWalkThrough\PresentationTier\Service References\ServiceReference1\Reference.cs:行 53
       場所 PresentationTier.Form1.Form1_Load() 場所 C:\Documents and Settings\custar\My Documents\Visual Studio 2008\Projects\SandBoxes\NTierWalkThrough\PresentationTier\Form1.cs:行 22
       場所 Windows.Forms.Form.OnLoad()
       場所 Windows.Forms.Form.OnCreateControl()
       場所 Windows.Forms.Control.CreateControl()
       場所 Windows.Forms.Control.CreateControl()
       場所 Windows.Forms.Control.WmShowWindow()
       場所 Windows.Forms.Control.WndProc()
       場所 Windows.Forms.ScrollableControl.WndProc()
       場所 Windows.Forms.ContainerControl.WndProc()
       場所 Windows.Forms.Form.WmShowWindow()
       場所 Windows.Forms.Form.WndProc()
       場所 Windows.Forms.Control.ControlNativeWindow.OnMessage()
       場所 Windows.Forms.Control.ControlNativeWindow.WndProc()
       場所 Windows.Forms.NativeWindow.Callback()


    ************** 読み込まれたアセンブリ **************

    ....(中略)....

     

    ************** JIT デバッグ **************
    Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、
    またはコンピュータ (machine.config) の構成ファイルの jitDebugging
    値を system.windows.forms セクションで設定しなければなりません。
    アプリケーションはまた、デバッグを有効にしてコンパイルされなければ
    なりません。

    例:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>

    JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、
    ハンドルされていない例外はすべてコンピュータに登録された
    JIT デバッガに設定されなければなりません。

     

    2008年4月17日 16:07
  • もう一つのスレッドと同じ内容ですので、こちらは閉じておきます。

     

    まどか さん、アドバイスありがとうございます。

    2008年4月27日 1:44