Tag: asmx

通过从web.config中读取来更改Web服务的URL

我有一个使用asmx Web服务的WCF应用程序。 我在应用程序的一百万个地方使用Web服务: public string LogOnUser(string username, string password, string db) { var wsi = new ASMXServiceInterface(); return wsi.LogIn(); } public string GetNotes(string username, string password, string db) { var wsi = new ASMXServiceInterface(); return wsi.GetNotes(); } etc, etc etc… 当然我想在构造函数中设置服务的url,但是它在reference.cs中自动生成,如果我在那里更改它,它可以工作,但如果我更新我的引用(我会)它丢失,我必须手动再来一遍: /// public ASMXServiceInterface() { this.Url = System.Web.Configuration.WebConfigurationManager.AppSettings[“RQTCSServiceURL”]; } Web服务URL需要是动态的,因为它的不同版本已经实现。 如何在我的WCF项目中设置我的Web服务的URL一次,这样可以在web.config中更改服务的url,而无需在reference.cs中进行更改?

限制对ASMX Web服务的调用次数

我们在IIS6中托管了一个asmx Web服务。 是否有一种方法可以限制单个IP在一段时间内对服务的呼叫数量? 我们不想设置硬限制(每小时X次),但我们希望能够防止来自单个用户的峰值。 我们目前正在调查我们的防火墙是否能够限制连接尝试。 如果我们的防火墙无法限制连接,是否有一种以编程方式处理此问题的好方法? 而不是试图提出我们自己的自定义解决方案并重新发明轮子,是否可以使用现有的实施或策略?

获取所请求客户端的IP地址(Soap消息)

我建立了一个ASMX服务,并在代码中处理来自ELMAH的错误日志。 我在数据库中添加了所有字段,并添加了一些,一个是所请求客户端的IP地址… 但我不能(请阅读,不知道如何)得到… 我已经习惯了 string ipAddress = HttpContext.Current.Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]; if (ipAddress == “”) ipAddress = HttpContext.Current.Request.ServerVariables[“REMOTE_ADDR”]; 但是当然它不适用,因为它不是HTML请求而是SOAP请求 在ALL_HTTP标题中,我得到了所有这些信息: HTTP_CONNECTION:Keep-Alive HTTP_CONTENT_LENGTH:440331 HTTP_CONTENT_TYPE:text/xml; charset=utf-8 HTTP_EXPECT:100-continue HTTP_HOST:www.mydomainname.com HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3074) HTTP_VSDEBUGGERCAUSALITYDATA:uIDPowJ7s0UYlmhEqcDjxYQT/TQAAAAADlaOOkJ5DUizA7gKLg3YEPur8pFWlaVFmpinSAOBTuIACQAA HTTP_SOAPACTION:”http://www. mydomainname.com/webservices/ErrorReportService/ReportErrors” 我在哪里以及如何获得请求的IP? 请注意,我没有使用任何类型的身份validation(还)… 🙂

如何在C#中将我自己的wsdl包含在我的Web服务中

我有一个.wsdl文件,我的Web服务(旧的asmx样式)必须实现。 这是照顾。 当我发布Web服务时,您可以使用?wsdl参数调用它来获取生成的wsdl。 如何包含我的.wsdl文件,以便返回的文件而不是生成的文件? 是否可以在我的Web服务类中使用属​​性?

捕获WebService抛出的SoapException

我写了以下服务: namespace WebService1 { [WebService(Namespace = “http://tempuri.org/”)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class Service1 : System.Web.Services.WebService { [WebMethod] public string Test(string str) { if (string.IsNullOrEmpty(str)) throw new SoapException(“message”, SoapException.ClientFaultCode); else return str; } } } 并且有一个基本的应用程序来测试它(一个按钮在click事件上调用Test方法): private void button1_Click(object sender, EventArgs e) { ServiceReference1.Service1SoapClient ws = new WindowsFormsApplication1.ServiceReference1.Service1SoapClient(); try { ws.Test(“”); } catch (SoapException ex) […]

如何从ASMX Web服务返回错误?

我的Web服务方法返回一个集合对象,这将很好地序列化,这要归功于C#web服务的工作方式! 但是,如果我的代码抛出未捕获的exception,我想返回一个自定义错误对象。 这可能是使用C#ASP.NET v2吗? 例如, 正常操作应返回: Sample Sample 但是我想要的错误

测试表仅适用于本地计算机的请求

为什么对于我的一些Web服务,我得到测试表单,所以我可以看到生成的xml数据,但对于其他Web服务,我收到一条消息说The test form is only available for requests from the local machine. ? 两次,我从客户端浏览器连接到Web服务的URL,所有Web服务都是使用C#,.NET-3.5创建的。

第一次调用.net webservice很慢

我在我的.net winforms应用程序中调用.net webservice,两者都在框架4.0中。 在程序执行期间,webservice第一次调用方法时,调用大约需要10-12秒。 后续通话需要约1-2秒。 即使重新创建Web引用实例,后续调用仍然是〜1-2秒。 当winforms应用程序重新启动时,第一次呼叫延迟再次发生,但后续呼叫响应。 Web调用的实例是在调用发生之前创建的,并不是延迟的一部分。 正在生成winforms应用程序的XmlSerializers(并据我所知使用,但我不知道如何validation这一点)。 由于Web服务端的首次编译,因此不会发生延迟。 这是一整天都在使用的生产Web服务,其apppool仍保留在内存中。 据我所见,延迟发生在客户端,或者客户端和服务器之间的第一次调用,而不是后续调用。 不知道接下来要检查什么。 有任何想法吗?

什么是ASP.NET Webservice请求生命周期?

在常规的aspx页面上,我有一些事件,例如Page_Init , Page_Unload等,它们以明确定义的顺序发生 。 我有一个提供[WebMethod()]的asmx页面。 是否存在类似的事件? 特别是,一些允许我初始化一些数据(如Page_Load )并进行一些清理(如Page_Unload )的事件将非常有用。 (据我所知, asmx代码隐藏类的构造函数似乎在每个WebMethod请求上被调用,即,为每个WebMethod请求创建一个新实例,但这只是一个观察,而不是我所做的事情发现在某处…

完成后,Web服务中的单独线程

如果在我道歉之前已经问过这个,这是.NET 2.0 ASMX Web服务,那么我的道歉= D 仅公开Web服务的.NET应用程序。 每天大约1000万条消息在多个IIS服务器之间进行负载平衡。 每个传入的消息都是XML,传出的消息是XML。 (XMLElement)(我们有强大的服务器,运行类固醇)。 我有一个SLA,所有消息都在X秒内处理。 此过程中的一个function,链接方法,现在需要10-20秒,每个事务都需要它,但是在Web服务返回结果之前发生它并不重要。 因此,我提出了将其抛弃到另一个线程的建议,但现在意识到我的话语和他们背后的热心开发者可能还没有完全想到这一点。 以下示例在左侧显示当前流量。 在右边正在尝试什么 实际上我正在寻找的是让Web服务产生一个长期运行(10-20秒)的线程,即使在Web服务完成后也会执行该线程。 实际上,这是有效的: Thread linkThread= new Thread(delegate() { Linkmembers(GetContext(), ID1, ID2, SomeOtherThing, XMLOrSomething); }); linkThread.Start(); 使用它我们在开发盒上将时间从19秒减少到2.1秒,这是相当可观的。 我担心随着流量的增加,如果供应商/外部方决定限制我们,IIS可能会决定在完成处理之前回收/终止这些线程。 我同意我们的解决方案可能不是“最好的”但是我们没有时间在Queue系统或其他Windows服务中构建来处理这个问题。 有一个更好的方法吗? 有什么需要考虑的警告吗? 谢谢。