区分ASMX Web服务中的客户端应用程序和浏览器?

时间:2010-08-10 14:59:16

标签: c# sql-server web-services asmx connection-string

这是Choosing a Connection String based on kind of request的后续行动,我没有得到答案,而我认为有效的不是。

我有一个web服务需要根据用户从浏览器或客户端应用程序调用它来选择特定的连接字符串。

我试过了:

HttpContext.Current != null? ConnectionStrings["Website"].ConnectionString : ConnectionStrings["Client"].ConnectionString

但意识到,即使我正在使用客户端应用程序,也会在某些时候出现一些HttpContext(如果有人可以解释它为什么会很棒),但Browser下的Request字段是"Unknown"。所以,我试过了:

if ( HttpContext.Current != null )
{
  if ( HttpContext.Current.Request.Browser != "Unknown" )
  {
     //browser connection string here
  }
  else
     //client app connection string here
}
else
  //client app connection string here

这在调试时会产生奇迹,但在测试环境中,即使从客户端应用程序调用,它仍然指向浏览器连接字符串,就好像在某些时候浏览器不是“未知”...

有更简单/更简单的方法吗?我这样做的方式似乎很难看。

我现在非常绝望,因为我不知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

不是检测和打开浏览器类型,而是考虑以下两个建议:

添加自定义请求标题

在各种呼叫者中,在Http请求中定义新的自定义标头。

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("CallerType", "ClientApp"); // "Browser", etc.

然后,您确切地知道客户端正在调用哪种类型的客户端。这很难弄错,也不会被欺骗/弄错。

在QueryString中包含来电者类型

myService.asmx?BrowserType=1

在.asmx webmethod中添加一个简单的新查询字符串参数。这在受控环境中的工作方式相同,但如果其他用户/开发人员弄错了,或者预期值不正确,则必须采取其他措施来纠正/处理。

两者都允许您轻松确定传入值的connString。也许缺少修饰符/标题,你可以假设一个默认值。您的示例问题有两个基本结果,建议的解决方案很容易扩展(浏览器,客户端应用程序,iPhone,whathaveyou)。