【发布时间】:2011-04-14 09:40:50
【问题描述】:
我有一个 WSDL,我从中生成了 ClientBase 的实现,即 MyService
function void updateData(Data data){
BasicHttpBinding binding = new BasicHttpBinding();
// see there is naked username and password.
EndpointAddress address = new EndpointAddress("http://qa.farwaha.com/eai_enu/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&UserName=john&Password=johspassword");
MyService service = new MyService(binding, address);
try{
service.update(data);
}finally{
service.close();
}
}
不幸的是,要调用此 Web 服务,我必须传递用户名和密码,如代码所示。所以,我的问题是关于最佳实践。
鉴于它是一个 Winform 应用程序。
创建 MyService 对象的内存/CPU 密集程度如何?
如果您建议兑现服务,它将保留 EndpointAddress;哪个实习生有一个带有用户名和密码的字符串。这不是一个好主意..任何解决方法?
- 如果我这样保留代码,服务对象将被垃圾收集......并且不会有用户名或密码的痕迹(GC 运行后)
这是一个示例代码,我有将密码存储在 SecureString 中的用户对象,并且每次我必须访问密码时;我在实例私有方法中从 SecureString 获取字符串,快速使用它并让它被垃圾收集。我相信如果我使用类似上述的方法,它将是安全或足够安全的,而不是坚持服务的参考,你有什么建议!!
【问题讨论】:
-
您所描述的情况似乎不正确。在查询字符串中调用具有值(用户名、密码……)的服务似乎适合基于 REST 的服务。您说您正在调用的服务正在提供 WSDL,因此它似乎是基于肥皂的服务。您不能同时拥有两种调用方案,因为soap 服务只能访问soap 信封中的任何内容而忽略查询字符串值。您能否澄清这是否实际上是基于肥皂的服务?谢谢!
-
@Sixto 这确实是一个基于 SOAP 的 Web 服务。我会检查你的建议,这是有道理的。感谢您的意见。
标签: c# web-services