Tag: asmx

有没有更好的方法在C#中自定义SOAP头?

在过去,我需要在使用导入的WSDL Web引用的C#项目中创建自定义SOAP头。 我找到了一种方法可以做到这一点,但我对此并不满意,而且我有意识地想知道是否有更好的方法。 我所做的是创建一个派生自SoapHeader的头: [System.Xml.Serialization.XmlTypeAttribute(Namespace = “http://model.test.net”)] [System.Xml.Serialization.XmlRootAttribute(“securitytoken”, Namespace = “http://model.test.net”, IsNullable = false)] public class SpecialHeader : SoapHeader { [System.Xml.Serialization.XmlTextAttribute()] public string aheadervalue; } 然后,我必须修改从WSDL生成的代码,并在每个要包含自定义标头的Web调用之前向新标头的实例和以下内容添加引用: [System.Web.Services.Protocols.SoapHeaderAttribute(“instancename”, Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] 其中“instancename”是生成的类中的自定义标头的实例变量名称。 这样可以正常工作,除了WSDL中的任何更改都要求重新完成它,因为它重新生成了类。 在其他语言中,标题可以添加到生成的代码之外,所以可能我错过了在C#中完成的方式。 有更好的方法吗?

Web服务无法在GAC中使用类型创建类型错误

遇到一个不寻常的问题,似乎我喜欢做一些不常见的事情。 我有一个复合控件,它检查我的应用程序的根目录中是否存在给定的Web服务文件,如果不存在,它会在标记中创建带有必要指令的文件以进行滚动,例如: 反过来,它被保存到输出。 完成此步骤后,将启动应用程序池上的回收以在IIS中呈现新页面。 该指令指向的程序集是GAC部署的,但是当ASMX通过IIS提供服务时,由于某些原因被忽略。 如果我将程序集复制到BIN目录中,应用程序工作正常,但是,我想将此解决方案部署为我的SharePoint场中的Web部件更新,并且在我的应用程序中启用了完全信任不是我想要的路径走。 我假设ASMX文件或从GAC部署的程序集中的类inheritance的任何文件被忽略是正确的吗? 我不明白为什么会这样,据我所知,IIS会在BIN中尝试映射程序集,如果找不到,它会去询问GAC是否可以找到它在那里,对吗?

如何关闭Web服务调用的持久连接

从我的WinForms应用程序,我必须调用Web服务,我正在使用Web引用。 到目前为止没有问题,但现在我有一个客户端使用负载平衡器后面的代理背后的软件。 Web服务调用很顺利,但两分钟后它们就失败了。 我们可以通过反复调用间隔小于两分钟的Web服务来解决这个问题。 我发现负载均衡器在没有使用两分钟时会断开tcp会话,看起来这就是我们的情况,软件无法恢复。 如何告知gerenated Web引用为每个Web服务调用使用新的tcp连接?

强制ASMX代理使用XmlSerializer而不是DataContractSerializer

我们获得了我们必须在项目中使用的外部SOAP服务。 所有这些都提供了WSDL数据,但其中很多都不是.NET服务(大多数都是用Java编写的)。 我们使用wsdl.exe工具生成了许多客户端代理。 这个工具做它应该做的事情,它创建代理供我们使用。 一旦我们尝试使用生成的代理调用这些服务上的方法,就会出现问题。 我们拦截所有SOAP请求以进行日志记录,XML数据看起来与WSDL模式中指定的不同。 例如,如果一个字段被称为“名称”,我们的代理将序列化为“nameField”。 我想这是因为名为“Name”的属性使用名为“nameField”的支持字段。 另一方面的服务显然无法解释这种命名约定。 如果我们的ASMX代理使用旧的XmlSerializer,这将不会发生,但由于某种原因,他们选择DataContractSerializer,这完全扰乱了序列化并破坏了客户端和服务之间的兼容性。 我的同事们已经使用手动构建XML数据,然后使用HttpWebRequest类发送它。 我认为这在2011年是完全不可接受的,这就是自动代理生成的目的。 我的问题是:为什么会发生这种情况? 为什么我们的代理使用DataContractSerializer,从而忽略了进程中的所有xml序列化属性? 有没有办法强迫他们再次使用XmlSerializer? 我们使用.NET 4.0。

WCF配置服务器以记住数据

我目前在WCF中有一个服务,它处理客户端发出的请求。 但是,它会缓存客户端发送的一些数据。 然后它对数据进行计算。 在任何时候,客户端都应该能够检索一些数据。 它由用户自行决定(当单击一个Button时,会发送一个AJAX查询来获取一些数据)。 我遇到的问题是,只要另一个客户端连接并开始发送请求,原始客户端发送的数据现在就会失真。 我想知道如何解决这个问题。 我试图使用会话,因为我正在寻找一些方法,我可以为每个想要连接它的客户端实例化我的“服务器对象”。 仍然没有运气。 此问题与此相关: WCF关闭连接/释放资源

获取“无法在Null值上调用此方法或属性”错误

更新1: 这条线上引发了exception: client_group_details.Add(new ClientGroupDetails( 原始问题: 我有以下代码,我从数据库的30列数据中删除了数据库中的2列。 每当任何列返回NULL值时,我都会收到错误: public class ClientGroupDetails { public String Col2; public String Col3; public ClientGroupDetails(String m_Col2, String m_Col3) { Col2 = m_Col2; Col3 = m_Col3; } public ClientGroupDetails() { } } [WebMethod()] public List GetClientGroupDetails(string phrase) { var client_group_details = new List(); using (connection = new SqlConnection(ConfigurationManager.AppSettings[“connString”])) { using (command = […]

ASMX返回纯字符串

我有一个ASP.NET Web服务(.asmx)。 我的服务定义如下: [System.Web.Services.WebService(Namespace = “http://tempuri.org/”)] [System.Web.Services.WebServiceBinding(ConformsTo = System.Web.Services.WsiProfiles.BasicProfile1_1)] public class MyService : System.Web.Services.WebService { [System.Web.Services.WebMethod] public string GetResult() { string result = “”; int day = System.DateTime.UtcNow.Day; if ((day % 1) == 1) result = “odd”; else result = “even”; return result; } } 目前,如果我调用此服务方法,我会得到以下结果: even 我的问题是,我只需要返回字符串部分。 我不想返回包装XML。 如何使用.asmx执行此操作? 谢谢!

为什么在VS2010中添加服务引用时,是否生成了客户端类?

我疯了,我相信。 也就是说,我之前从来没有遇到这样的问题,没有人(谷歌已经编入索引)似乎也遇到了同样的问题。 每当我向VS2010项目添加对特定ASMX服务的引用时,生成所有代码,就会有一个代表服务所有function的接口ServiceSoap ,但解决方案中的任何地方都没有具体实现该接口! 我究竟做错了什么? 我只需right click project , add service reference ,将paste url to .asmx , type ‘Blah’ in the namespace box , click OK 。 一切似乎都好了。 我猜蝙蝠疯了,我猜… 更新: 如果我在添加服务引用对话框中转到Advanced…并选择将其添加为.NET 2.0服务,一切正常,但我不是特别想这样做。 我正在使用的实际命名空间是Remedy ,服务.asmx文件是Service.asmx 。

Nullable类型的方法在使用GET的ASMX Web服务中不起作用

我有一个ASMX Web服务设置为使用HTTP GET方法。 采用基本String和Int参数的简单方法正常工作,我可以调用MyService.asmx/MethodName?Param=Value并以XML格式获取响应。 但是,当我有一个具有可空Int(即int? )的方法时,我收到此错误: Web服务方法名称无效。 错误消息令人困惑,因为该方法确实存在,而不是在GET范围内。 我认为这是因为可空类型太复杂而无法通过URL传递,但我找不到任何文档或SOpost。 我很欣赏Lists或自定义类等复杂类型无法使用GET,但我认为可以原生处理一个简单的可空int或可空日期,只需检测它是否从URL中省略。 猜猜不是那么简单! 任何建议或解决方法将不胜感激。 蒂姆,谢谢

ASMX webservice不返回JSON,只能使用application / x-www-form-urlencoded contentType进行POST

我可以使用jQuery IF调用我的web服务contentType =“application / x-www-form-urlencoded; charset = utf-8” 但是,这将返回xml: [myjson] 如果我尝试使用“application / json; charset = utf-8”对服务进行POST,我会收到500错误,其中包含空StackTrace和ExceptionType。 我的网络服务function从未被打过,所以我不太确定如何调试这种情况。 我的方法和类使用适当的属性进行修饰,并设置为使用JSON作为其响应类型(与我的wsdl和disco文件一样)。 我安装了Ajax扩展和web.config中的必需条目。 这是在SharePoint服务器场上,但我不确定这会产生太大的影响。 我在所有WFE上部署了web.config更改,并安装了ajax扩展。 服务再次起作用,除了默认内容类型之外,它不会接受任何其他内容。 不知道我在这里缺少什么,伙计…… 我的ajax电话: $.ajax({ type: “POST”, url: “/_vti_bin/calendar.asmx/Test”, dataType: “json”, data: “{}”, contentType: “application/json; charset=UTF-8”, success: function(msg){ alert(msg); }, error: function(xhr, msg){ alert(msg + ‘\n’ + xhr.responseText); } }); 我的webservice类: [WebService(Namespace = “http://namespace”)] [WebServiceBinding(ConformsTo […]