BasicHttpBinding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress(endAddress);
ChannelFactory<IMyService> myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint);
IMyService wcfClient = myChannelFactory.CreateChannel();
try
{
IDisposable chanel = wcfClient as IDisposable;
ICommunicationObject o = chanel as ICommunicationObject;
o.Opened += delegate { Console.WriteLine("OK") };
o.Close();
}
catch (Exception _ex)
{
}
问题:以上代码针对IMyService(添加了服务引用)一个WCF服务是可行的,但是假如我有多个WCF服务,需要采用统一的方法验证这些WCF服务是否有效,请问各位有什么好的建议吗?
可以,下班了,回头告诉你.
随便写一个接口类,如下(如果不小心方法重合了,更好,因为你还可以调用该方法以确定操作存在或运行正常):
[ServiceContract]
public interface IMyService
{
[OperationContract()]
void IsOnline();
}
// 下面是根据你的代码修改的调用:
string endAddress = @"net.tcp://192.168.6.110:28000/BusinessServices/SMSNotificationService";
NetTcpBinding myBinding = new NetTcpBinding();
myBinding.Security.Mode = SecurityMode.None;
EndpointAddress myEndpoint = new EndpointAddress(endAddress);
ChannelFactory<IMyService> myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint);
IMyService wcfClient = myChannelFactory.CreateChannel();
try
{
IDisposable chanel = wcfClient as IDisposable;
ICommunicationObject o = chanel as ICommunicationObject;
o.Open();
o.Close();
}
catch (EndpointNotFoundException notFound)
{
// 这里就表示你要使用的服务不在线,或不存在。
}
catch (TimeoutException timeout)
{
// 超时了,可能是网络问题,可以增加超时重新调用。
}
catch (FaultException fault)
{
// 你指定的客户端的配置有些问题,比如是binding,或security的要求。
}
catch (Exception _ex)
{
// 别的错误,分析下,看看到底是什么问题。
}
搞个服务来专门负责认证吧
认证之后发个标志,令牌之类的东西,
WCF 本身就有验证机制
在 bindings 的配置节点下,配置下就可以了
在behaviors节点下配置 userNameAuthentication
例如:<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider"/>
每次请求,你都要发送用户名和密码进行验证。
你可以去MSDN看一下,或者看看WEBCAST 上WCF方面的 视频。
可以统一,参考Rain Shan的回答。
即使你有多个服务,但是所有的服务都配置相同的服务行为,就可以了。
这个服务行为就是指定相同安全验证的地方。
呵呵
谢谢提问题的人。