Tag: asmx

如何通过GET调用ASMX Web服务?

我在这里定义了一个webservice: /app/AutocompleteManager.asmx [WebMethod] public string AutocompleteComposers() { return “hey, what’s up”; } 我想用额外参数的GET方法调用它。 如果我只是去/app/AutocompleteManager.asmx?q=something ,它将无法工作,因为我没有指定的操作。 如果我去/app/AutocompleteManager.asmx/AutocompleteComposers?q=something它破坏了什么。 任何的想法?

从ASMX调用基于任务的方法

我有一个最近的经验,我想分享这可能对任何必须维护必须更新以调用基于任务的方法的旧ASMX Web服务的人有所帮助。 我最近一直在更新一个ASP.NET 2.0项目,其中包括一个传统的ASMX Web服务到ASP.NET 4.5。 作为更新的一部分,我介绍了一个Web API接口,以允许应用程序的高级自动化。 ASMX服务必须与新API共存才能实现向后兼容。 该应用程序的一个function是能够代表呼叫者从外部数据源(工业工厂历史记录,定制Web服务等)请求数据。 作为升级的一部分,我重新编写了数据访问层的大部分内容,以使用基于任务的异步模式异步请求数据。 鉴于在ASMX服务中不可能使用aync / await,我修改了ASMX方法以对异步方法进行阻塞调用,即调用基于任务的方法,然后使用Task.WaitAll阻塞线程,直到任务完成。 当调用任何正在调用返回任务或任务的方法的ASMX方法时,我发现请求总是超时。 当我逐步完成代码时,我可以看到异步代码已成功执行,但对Task.WaitAll的调用从未检测到任务已完成。 这引起了一个令人头疼的问题:ASMX服务如何能够与新的异步数据访问function共存?

自定义DateTime XML序列化

我希望能够使用不是服务器的特定时区序列化DateTime,也不是客户端时间。 基本上,任何时区。 是否可以在.Net2.0 webservices中覆盖DateTime序列化? 我使用xsd.exe编译xmlschema,所以我尝试使用XmlSchemaImporter。 OnSerialize示例显示值更改,但不更改输出格式。 XmlSchemaImporter,将其加载到gac中,运行xsd.exe,并生成具有我想要的类的代码……但该类是一个属性,最终无法反映。 [InvalidOperationException:无法序列化类型为Cuahsi.XmlOverrides.W3CDateTime的成员’metadataDateTime’。 XmlAttribute / XmlText不能用于编码复杂类型。] 生成的代码 [System.Xml.Serialization.XmlAttributeAttribute()] public Cuahsi.XmlOverrides.W3CDateTime dateTime { get { return this.dateTimeField; } set { this.dateTimeField = value; } } XmlSchemaImporter public class ImportW3CTime : System.Xml.Serialization.Advanced.SchemaImporterExtension { public override string ImportSchemaType(string name, string ns, XmlSchemaObject context, XmlSchemas schemas, XmlSchemaImporter importer, CodeCompileUnit compileUnit, CodeNamespace mainNamespace, CodeGenerationOptions options, […]

我可以停止服务引用生成ArrayOfString而不是string 吗?

我有一个带有这样签名的web方法: public string[] ToUpper(string[] values) 我在Visual Studio 2010中使用“添加服务引用”来生成对我的服务的引用。 不幸的是,这个过程创建了一个名为“ArrayOfString”的代理类,并使用这种类型而不是预期的’string []’类型。 生成的异步服务调用签名最终如下所示: public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { } public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { } 我已经尝试了配置服务参考表单中“收集”下拉列表的所有选项,但它似乎并没有什么区别。 这在以前工作,但由于某种原因它可能突然停止工作,可能是从服务中删除另一个Web方法。 如何让生成的服务引用类使用string []类型而不是生成的ArrayOfString类型? 任何有关这方面的帮助将不胜感激。 编辑:正如@Oleg建议的那样,我正在使用ASMX Web服务。

从类库中使用asp.net应用程序中的Web服务

我的团队和我有一个asp.net Web表单应用程序,并使用几个类库。 在其中一个库中,我们尝试使用Web服务。 Web引用已添加到Web应用程序项目中,并添加了相应的引用。 该应用程序编译。 尝试在类库中使用所述Web服务时,凭据似乎不起作用,并且调用失败。 但是,如果我们从类库中取出Web服务调用,并在Web应用程序中使用它,它就可以工作。 任何想法为什么这不适用于类库。

我的ASMX代理方法中有哪些额外参数?

如果我将.NET 1.1客户端的Web引用添加到WCF服务,则客户端生成的代理方法包含一个额外的参数,以每个服务方法参数的后缀’Specified’结尾,例如 [OperationContract] string HelloWorld(string foo, int bar); 结果是: Service1.HelloWorld(string foo, bool fooSpecified, int bar, bool barSpecified); 我的服务参数不是可选的,所以客户端的这些额外参数是什么,我怎样才能摆脱它们?

为什么我不能在.NET asmx Web服务中公开接口?

我有一个.NET Web服务(使用asmx …还没有升级到WCF)暴露了以下内容: public class WidgetVersion1 : IWidget {} public class WidgetVersion2 : IWidget {} 当我尝试绑定到Web服务时,出现以下序列化错误: 无法序列化IWidget类型的成员WidgetVersion1,因为它是一个接口。 我已经尝试将各种属性添加到IWidget接口( XmlIgnore , SoapIgnore , NonSerialized ),但它们在接口上无效。 有谁知道为什么我无法公开界面? 我假设WSDL不支持接口,但是.NET不能通过简单地不对接口进行序列化来解决这个问题吗? 除了从WidgetVersion1和WidgetVersion2类定义中删除IWidget接口之外,还有什么方法吗?

从代理服务器后面添加Web服务引用

我正在使用vs2010。 在一个简单的控制台应用程序中,我尝试将服务引用添加到http://***/service1.asmx ,旧的asmx服务。 我的电脑在代理服务器后面,所以我收到一个错误: “远程服务器返回了意外响应:(407)需要代理validation。” 当我使用wsdl工具我无法定义代理服务器端口号,我得到消息,服务器,例如10.0.0.3:80,没有响应,但我需要指定8080端口,不知道如何。 我怎么能创建一个参考?

如何使用C#发送/接收SOAP请求和响应?

private static string WebServiceCall(string methodName) { WebRequest webRequest = WebRequest.Create(“http://localhost/AccountSvc/DataInquiry.asmx”); HttpWebRequest httpRequest = (HttpWebRequest)webRequest; httpRequest.Method = “POST”; httpRequest.ContentType = “text/xml; charset=utf-8”; httpRequest.Headers.Add(“SOAPAction: http://tempuri.org/” + methodName); httpRequest.ProtocolVersion = HttpVersion.Version11; httpRequest.Credentials = CredentialCache.DefaultCredentials; Stream requestStream = httpRequest.GetRequestStream(); //Create Stream and Complete Request StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII); StringBuilder soapRequest = new StringBuilder(“”); soapRequest.Append(“Sam”); soapRequest.Append(“”); streamWriter.Write(soapRequest.ToString()); streamWriter.Close(); […]

用于WCF服务的VS2003 Web参考具有额外的“IdSpecified”参数

我正在使用VSTS 2008 + .Net 3.5 + C#开发WCF服务,当我还使用VSTS 2008开发客户端(使用添加服务引用function自动生成客户端Web服务代理代码)时,它工作正常。 我开发的WCF使用basicHttpBinding。 我遇到的问题是,当我使用Visual Studio.Net(Visual Studio 2003)生成客户端Web服务代理代码时,还有一个名为IdSpecified(bool类型)的OperationContract方法的附加输入参数。 我已经测试过,当IdSpecified指定为true时,Id参数的值将正确传递给WCF服务器端,但是当我指定IdSpecified为false时,无论我指定给Id参数的值是什么,在WCF服务器端,Id都将是总是0.我也尝试输入参数类型,如字符串,客户端没有这样的附加输入参数。 我的问题是为什么还有一个额外的参数? 它的含义是什么,是否可以避免生成这样的附加参数? 这是Visual Studio.Net自动生成的客户端Web服务代理代码, public StudentInfo Poll(int Id, [System.Xml.Serialization.XmlIgnoreAttribute()] bool IdSpecified) 这是我的VSTS 2008 WCF服务器端代码, [OperationContract] StudentInfo Poll(int Id); 编辑1:这是客户端自动生成的关于Poll方法的代码的一部分。 [return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] public StudentInfo Poll(int Id, [System.Xml.Serialization.XmlIgnoreAttribute()] bool IdSpecified) { object[] results = this.Invoke(“Poll”, new object[] { Id, IdSpecified}); return ((StudentInfo)(results[0])); }