C# 调用web Service时 需要Basic身份认证

micro518 2015-01-08 03:51:00
现在有一个局域网的WebService, 在IE中打开时需要用户名和密码,输入后可以看到XML。我把WebService以添加WebReference的方式添加到Windows Service项目中,同样需要用户名和密码,输入后可正常引用。windows服务安装后不能启动,原因估计为windows服务不能引用未经验证的WebService,问题我有用户名和密码怎么传递给服务器,验证方式Basic
...全文
1900 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyuehua1314 2016-05-23
  • 打赏
  • 举报
回复
的说法是否
  • 打赏
  • 举报
回复
引用 2 楼 micro518 的回复:
[quote=引用 1 楼 jenkin1016 的回复:]
谢谢您的回复,但是答非所问,我问的是:程序运行时怎么把我的用户名和密码传递给服务器,验证方式Basic ,服务时现有的,不可改变的[/quote] 那个代码有一定关系啊。它有一句代码
this.VerifyCredential(this) ;
从抠字眼的角度时可以靠上边儿的。 关键是不知道你的 webservice 在哪里设置了验证。
  • 打赏
  • 举报
回复
引用 楼主 micro518 的回复:
现在有一个局域网的WebService, 在IE中打开时需要用户名和密码,输入后可以看到XML。我把WebService以添加WebReference的方式添加到Windows Service项目中,同样需要用户名和密码,输入后可正常引用。windows服务安装后不能启动,原因估计为windows服务不能引用未经验证的WebService,问题我有用户名和密码怎么传递给服务器,验证方式Basic
你在 windows 服务程序中引用 webservice 客户端,有啥意义啊?! 你用来发布 webservice 的那个web 服务器网站,应该允许匿名访问。如果是 IIS发布的,看看你的网站是否设置为匿名访问!
SPFarmer 2015-01-08
  • 打赏
  • 举报
回复
myWebService.Credentials = new System.Net.NetworkCredential(userName, password, domain); 试试这个。在调用web service之前,把用户名密码加进去。
micro518 2015-01-08
  • 打赏
  • 举报
回复
引用 1 楼 jenkin1016 的回复:
谢谢您的回复,但是答非所问,我问的是:程序运行时怎么把我的用户名和密码传递给服务器,验证方式Basic ,服务时现有的,不可改变的
回.到.未来 2015-01-08
  • 打赏
  • 举报
回复
1,使用SoapHeader传递和验证用户 Web Service端的代码: 1.1先创建一个继承自System.Web.Services.Protocols.SoapHeader CredentialSoapHeader类: public class CredentialSoapHeader : SoapHeader { private string _userName ; private string _userPassword ; public string UserName { get { return _userName ; } set { _userName = value ; } } public string UserPassword { get { return _userPassword ; } set { _userPassword = value ; } } } 1.2创建对外发布的Web Service方法 public class MyService : System.Web.Services.WebService { private CredentialSoapHeader m_credentials ; public CredentialSoapHeader Credentails { get { return m_credentials ; } set { m_credentials = value ; } } //对外发布的服务 [WebMethod(BufferResponse = true,Description = "欢迎 方法" ,CacheDuration = 0,EnableSession=false, MessageName = "HelloFriend",TransactionOption = TransactionOption.Required)] [SoapHeader("Credentails")] public string Welcome(string userName) { this.VerifyCredential(this) ; return "Welcome " + userName ; } //验证是否合法 private void VerifyCredential(MyService s) { if ( s.Credentails == null || s.Credentails.UserName == null || s.Credentails.UserPassword == null ) { throw new SoapException("验证失 败",SoapException.ClientFaultCode,"Security") ; } //在这里可以进一步进行自定义的用户验证 } } 创建使用MyService的客户端(本处使用WinForm来做实例) 先把MyService的引用添加进来 public class ClientForm : System.Windows.Forms.Form { public ClientForm() { MyService s = new MyService() ; this.InitWebServiceProxy(s) ; string temp = s.Welcome("test") ; MessageBox.Show(temp) ; } private void InitWebServiceProxy(MyService s) { CredentialSoapHeader soapHeader = new CredentialSoapHeader () ; soapHeader.UserName = "test" ; soapHeader.UserPassword = "test" ; s.CredentialSoapHeaderValue = soapHeader ; string urlSettings = null ; //这里可以从配置文件中获取 if (urlSettings != null ) { s.Url = urlSettings ; } s.Credentials = (System.Net.NetworkCredential) CredentialCache.DefaultCredentials ; } }

12,166

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧