Tag: soap

如何在C#中使用VIES SOAP服务检查欧盟增值税

我有一个ASP.NET网站,需要检查用户提供的增值税。 VIES服务可用于公开SOAP API的服务 。 我需要一个关于如何使用此服务validation增值税的简单示例。 在PHP中,它是以下4行: https : //stackoverflow.com/a/14340495 。 对于C#,我发现2010年的一些文章不起作用,或者是几十行甚至几百行“包装”,“辅助服务”等。 我不需要任何一个,有人可以提供类似PHP的四线程,可以在C#中检查增值税吗? 谢谢。

有没有更好的方法在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#中完成的方式。 有更好的方法吗?

将SOAP信封发布到MS Dynamics NAV Web服务

我正在尝试使用HttpWebRequest,HttpWebResponse将SOAP Envelope直接发布到Dynamics NAV Webservices。 码: private void button1_Click(object sender, EventArgs e) { string requestString = LoadData(); HttpWebRequest request; HttpWebResponse response = null; string url = “http://localhost:7047/DynamicsNAV70/WS/Page/nav_Item”; byte[] requestBuffer = null; Stream postStream = null; Stream responseStream = null; StreamReader responseReader = null; request = (HttpWebRequest)WebRequest.Create(url); request.ProtocolVersion = new Version(1,1); request.Method = “POST”; //request.Headers.Add(“SOAPAction”, @”urn:microsoft-dynamics-schemas/page/nav_item:create”); request.Headers.Add(“Action”, […]

具有WS-Security的WCF客户端

我需要实现一个满足以下SOAP消息示例的WCF客户端: 444561ee-277f-77b2-c664-7a9923jfgh1b f68e6ff9-74f7-4022-8618-ec2cf0ee4b6a 4523394 johndoe 2012-06-26T16:18:15.185Z 2012-06-26T16:18:45.185Z 72214255 MIICMzCCAZygAwIBAgIET1e+dDANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJDQTEQMA4GA1UECBMHT250YXJpbzENMAsGA1UEChMET0hJUDEVMBMGA1UECxMMUmVnaXN0cmF0aW9uMRcwFQYDVQQDEw4xNDIuMTQ1LjcwLjE3NzAeFw0xMjAzMDcyMDAwNTJaFw0xMzAzMDcyMDAwNTJaMF4xCzAJBgNVBAYTAkNBMRAwDgYDVQQIEwdPbnRhcmlvMQ0wCwYDVQQKEwRPSElQMRUwEwYDVQQLEwxSZWdpc3RyYXRpb24xFzAVBgNVBAMTDjE0Mi4xNDUuNzAuMTc3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCs/JIP6CE5IkfTnD/c56K+QAYqETdLvW1xXJ6ipkVhjjC2ASKuuH4fvhbyxo2B4VugsL9r4E5jHEKoi+GDKOLlLZRfSy0cB8IcpXonAuGqMzhCoEQ1CdxNb9etMyvQGRKEBgniKKxTvpTyZdpYDi92up5E+FYL3jEejhp+1iDFJQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAHn8VZS169BJMa4E6SNLnY7u80zSh90mbrTUWjM1dEicv3jQMMsrWHfoCt+nRSqfNLUTLc8U0LqiB3jnnNJgJt1T7Sp8eUZPdH0gY3i83ZXA8HDFKMZF3qL8I8ncu8FPcZGYBNhYrGjXXsuqXimiTIjxgm06ErRa/51szOFFxWrB FkhA37COGmsKeEH50LAGhKntvRpD0+xOGsGzXAV210k= RA1O1voUNDV9+hi6IzNNxkTHfEdu2pu6fppiwN23JGI= 3vVj2VEbLKEvGy4yt7k8i2BeWUOaCygnFMduT7EyP3A= yFOmFgMDHMBooWIEsB3azib2EX7fR+Ich03J19kFMVE= zoxMcAQ2WLBIir333NJk52r4axwznflX+KxMQTPFvfQ= HmOiZS4gZbxv07+sLjyi7Vfg3Rfpvr3IVnaHfRp4aKvg5yBFlLocPIYwhUhmCCs1LXrJxR0hsbe0K2sz3ML5hH+PDEGetlPKSN9R1x9K95w7V1JQcTUULiVgNGLCfxgFV2HNy1iNvlTc7COS+7w4xSgsY4KlVgrBw0T1srhHpUA= 00123 CL 我得到的最相似的是使用以下绑定配置和自定义绑定更改来包含UserNameSecurityTokenParameter: 这是我用来添加UsnerNameSupportingToken的代码: public static Binding AddUserNameSupportingTokenToBinding( Binding binding ) { var elements = binding.CreateBindingElements( ); var security = elements.Find( ); if ( security != null ) { var tokenParameters = new UserNameSecurityTokenParameters( ); tokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient; tokenParameters.RequireDerivedKeys = […]

在C#中将asapx webservice中的Soap Request Header从text / xml更改为soap / xml

我需要打电话给网络服务。 我生成了一个代理并调用了该方法。 但它一直都在失败。 因为API在头文件中需要soap / xml,而在Visual Studio中生成的代理客户端在头文件中发送text / xml。 问题:是否可以更改生成的代理客户端的Content-Type标头的值?

无法以编程方式反序列化SOAP消息

当我尝试反序列化soap消息时,我得到以下exception。 我这样做是因为我有我想在测试中重用的响应文件。 我不能使用真实的服务或类似的东西,因为它不适合我们的测试框架的架构。 Test ‘MyUnitTestMethod’ failed: System.InvalidOperationException : There is an error in XML document (1, 2). —-> System.InvalidOperationException : was not expected. at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream) private const string _content = @” 0 name test1@mail.com “; /// [System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”, “2.0.50727.3082”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(“code”)] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, […]

WebServicesClientProtocol在安全标头中将EncodingType添加到Nonce

类似的问题: 如何在WSE 3.0(.NET)中的UsernameToken的Nonce元素中添加EncodingType属性 我正在尝试修改由WebServicesClientProtocol发送到服务的标头。 不幸的是,Microsoft的WSSE Username and Token Security Spec 1.1的实现与标准不兼容,并且没有使用Nonce发送EncodingType 。 在类似的问题我已经链接在顶部解决方案是禁用服务器上的EncodingTypevalidation,但我无法修改任何东西。 我已经将WSDL导入为Web Reference,我已将基类更改为WebServicesClientProtocol 然后在我的代码里面我这样做: var client = new QueryClient(); SoapContext requestContext = client.RequestSoapContext; requestContext.Security.Timestamp.TtlInSeconds = 60; var userToken = new UsernameToken(_userName, _password, PasswordOption.SendHashed); requestContext.Security.Tokens.Add(userToken); X509SecurityToken signatureToken = GetSecurityToken(); requestContext.Security.Tokens.Add(signatureToken); MessageSignature sig = new MessageSignature(signatureToken); requestContext.Security.Elements.Add(sig); client.SetClientCredential(signatureToken); client.SetClientCredential(new UsernameToken(_userName, _password, PasswordOption.SendHashed)); 这创建了几乎理想的请求,但Nonce没有得到EncodingType : ws_test_user […]

从WCF客户端消耗非wcf SOAP错误(定义了soap fault)

我有一个非Wcf服务器,我从WCF客户端调用,我需要访问已注册的soap故障,如果服务器抛出它(它包含我需要用户的反馈)。 我使用了如何从WCF客户端访问SOAP 1.1故障详细信息中的示例(没有错误契约),但是给出了一个痛苦,我确实在wsdl中定义了错误契约,至少每个SOAP规范,并且错误包含错误代码和错误字符串。 … … … … 服务导入可以正确识别所有这些并生成正确的代码构造: [System.Runtime.Serialization.DataContractAttribute(Name=”BtsSoapException”, Namespace=”http://www.cisco.com/BTS10200/i01″)] [System.SerializableAttribute()] public partial class BtsSoapException : object … …. [System.ServiceModel.ServiceContractAttribute(Namespace=”http://www.cisco.com/BTS10200/i01″, ConfigurationName=”CiscoBTSService.Bts10200Operations”)] public interface Bts10200Operations { [System.ServiceModel.OperationContractAttribute(Action=””, ReplyAction=”*”)] [System.ServiceModel.FaultContractAttribute(typeof(TestCiscoBTS.CiscoBTSService.BtsSoapException), Action=””, Name=”fault”)] TestCiscoBTS.CiscoBTSService.loginResponse login(TestCiscoBTS.CiscoBTSService.loginRequest request); … 当我使用无效帐户调用login() ,我会根据wsdl获得正确的响应: soapenv:Server.generalException 401 java.lang.Exception: No user profile defined in the database for fakeuser com.sswitch.oam.soap.intf.BtsSoapException at com.sswitch.oam.soap.impl.UserAuth.validateUser(UserAuth.java:63) … FaultExcpetion会触发,但是它的空白( Message =“”)并且我没有看到任何暴露BtsSoapException实例的属性。 […]

通过SOAP Web服务传输二进制数据?

我有一个Web服务,它返回一个对象的二进制数组。 是否有更简单的方法使用SOAP传输它,还是需要包含在XML中? 它工作正常,但我必须将发送和接收缓冲区增加到一个很大的值。 多少是太多了? 将XML中的二进制文件作为数组传输似乎效率很低,但我看不到任何使用.NET添加二进制附件的方法。

你如何从Web服务中捕获抛出的SOAPexception?

我成功地在我的Web服务中抛出了一些soapexception。 我想捕获exception并访问被exception调用的字符串和ClientFaultCode。 以下是我在Web服务中的一个例外情况的示例: throw new SoapException(“You lose the game.”, SoapException.ClientFaultCode); 在我的客户端,我尝试从可能引发exception的Web服务运行该方法,并且我抓住了它。 问题是我的catch块没有做任何事情。 看这个例子: try { service.StartGame(); } catch { // missing code goes here } 如何访问使用抛出exception调用的字符串和ClientFaultCode?