複雑な WCF サービスを Windows サービスに移動することができました。バインディングは次のようになります。
<service behaviorConfiguration="MyAppClientService.CustomValidator_Behavior" name="MyApp.ServiceImplementation.MyAppClientService">
<endpoint binding="netTcpBinding" bindingConfiguration="netTcpRegular" address="Regular" bindingNamespace="http://MyApp.ServiceContracts/2007/11" contract="MyApp.ServiceContracts.IMyAppClientService"/>
<endpoint binding="netTcpBinding" bindingConfiguration="netTcpWindowMessageSecurity" address="Windows" bindingNamespace="http://MyApp.ServiceContracts/2007/11" contract="MyApp.ServiceContracts.IMyAppClientService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8001/MyAppService/Client"/>
<add baseAddress="http://localhost:8002/MyAppService/Client"/>
</baseAddresses>
</host>
</service>
サービスが開始されたら、ブラウズします。http://localhost:8002/MyAppService/Client
これは正常に動作し、WSDL も表示されます。
しかし、Winform クライアントでサービスに接続しようとすると、サービスが見つかりません。クライアントでのアドレスは次のようになります。
<client>
<endpoint address="net.tcp://localhost:8001/MyAppService/Client/MyAppClientService.svc/Regular" behaviorConfiguration="BasicBehavior" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IMyAppClientServiceRegular" contract="MyApp.ServiceContracts.IMyAppClientService" name="MyTest_RegularLogin"/>
</client>
ブラウジングhttp://localhost:8001/MyAppService/Client
すると見つからないページが表示されますが、http ではなく tcp でホストされているため、これは正しいと思いますか?
サービスが IIS7(WAS) でホストされていたとき、これは問題なく機能していましたが、クライアントで次のようなエンドポイントを使用しました。
<endpoint address="net.tcp://localhost/MyAppDev/MyAppClientService.svc/Regular" behaviorConfiguration="BasicBehavior" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IMyAppClientServiceRegular" contract="MyApp.ServiceContracts.IMyAppClientService" name="MyApp_RegularLogin"/>
注 : クライアントがユーザー名とパスワードを提供する通常のログイン (Windows ログインなし) であるという通常の統計
編集 :
私はこの記事に従っています: http://msdn.microsoft.com/en-us/library/ms733069.aspx
そして、これはWindowsサービスクラスがどのように見えるかです
public class MyAppWindowsService : ServiceBase
{
public ServiceHost _serviceHost = null;
public MyAppWindowsService()
{
// Name the Windows Service
ServiceName = "MyAppWindowsService";
}
public static void Main()
{
ServiceBase.Run(new MyAppWindowsService());
}
// Start the Windows service.
protected override void OnStart(string[] args)
{
if (_serviceHost != null)
{
_serviceHost.Close();
}
// Create a ServiceHost for the CalculatorService type and
// provide the base address.
_serviceHost = new ServiceHost(typeof(MyApp.ServiceImplementation.MyAppClientService));
// Open the ServiceHostBase to create listeners and start
// listening for messages.
_serviceHost.Open();
}
protected override void OnStop()
{
if (_serviceHost != null)
{
_serviceHost.Close();
_serviceHost = null;
}
}
}