C#:通过服务引用调用Web服务:缺少Content-Type Header

时间:2017-01-19 09:35:47

标签: c# soap visual-studio-2015 wsdl

我试图通过C#访问http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

我已将其添加为服务参考。现在我有以下代码:

public static string checkVat(string _countryCode, string _vatNumber, string _companyName, bool _isValid, string _companyAdress)
    {
        var binding = new BasicHttpBinding();
        var endpointAddress = new EndpointAddress("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
        var client = new ServiceReferenceCheckVat.checkVatPortTypeClient(binding, endpointAddress);

        string response = client.checkVat(ref _countryCode, ref _vatNumber, out _isValid, out _companyName, out _companyAdress);

        return response;
    }

这一行:

string response = client.checkVat(ref _countryCode, ref _vatNumber, out _isValid, out _companyName, out _companyAdress);

现在抛出异常

类型' System.ServiceModel.ProtocolException'的例外情况发生在mscorlib.dll中但未在用户代码中处理

其他信息:SOAP消息传递需要HTTP Content-Type标头,但未找到任何标头。

编辑:我从X ++中调用此类,如果这有任何区别。

2 个答案:

答案 0 :(得分:0)

也许您需要为您的网络配置添加设置。添加此Web服务时必须自动添加。我试过了,它向我重新调整了数据。

  <setting name="WebApplication6_eu_europa_ec_checkVatService" serializeAs="String">
    <value>http://ec.europa.eu/taxation_customs/vies/services/checkVatService</value>
  </setting>

这可能对您有所帮助this

你能试试吗?

    public static string checkVat(string _countryCode, string _vatNumber, string _companyName, bool _isValid, string _companyAdress)
    {
        var client = new eu.europa.ec.checkVatService();
        return client.checkVat(ref _countryCode, ref _vatNumber, out _isValid, out _companyName, out _companyAdress).ToString();
    }

答案 1 :(得分:0)

让它发挥作用。问题是错误的端点地址。

您必须使用http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

,而不是使用http://ec.europa.eu/taxation_customs/vies/services/checkVatService(从中创建引用的服务)

此链接也会自动在app.config文件中使用。 它有效,但由于某种原因它看起来有点不对劲。如果有人能够解释得更多,那就太棒了。