这个PHP Web服务调用的.NET等价物是什么?

时间:2016-11-15 12:06:50

标签: c# php web-services wcf service-reference

我正在尝试使用API​​,提供商只能提供PHP示例,我总结如下(删除了敏感数据):

 <?php       
    ini_set('default_socket_timeout', 1600);
    $options = array( 
        'login' => 'myusername', 
        'password' => 'mypassword',
        'trace' => 1
    ); 
    $url = 'https://supplierurl/ws?wsdl'; 
    $soapClient = new \SoapClient($url, $options);

    $params =  array('12345');

    try{
        $details = $soapClient->getData($params);
        var_dump($details->paramdetails);
    }
    catch(\Exception $e){
        echo "Last request headers:<br>\n".$soapClient->__getLastRequestHeaders()."<br><br>\n";
        echo "Last request:<br>\n".$soapClient->__getLastRequest()."<br><br>\n";
        echo "Last response headers:<br>\n".$soapClient->__getLastResponseHeaders()."<br><br>\n";
        echo "Last response:<br>\n".$soapClient->__getLastResponse()."<br><br>\n";
    }
?>

我已经在我的开发机器上成功运行了这个并按预期恢复了数据。

我试图在.NET中使用此服务,方法是使用提供的url添加服务引用,它会按预期生成代理代码,为我提供如下配置:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
            <binding name="mybinding">
              <security mode="Transport">
                <transport clientCredentialType="Basic"/>                  
              </security>

            </binding>
            <binding name="mybinding1" />
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="https://supplierurl/ws"
            binding="basicHttpBinding" bindingConfiguration="mybinding"
            contract="API.portType" name="API.port" />
    </client>
</system.serviceModel>

测试代码如下:

API.portClient client = new API.portClient();           
client.ClientCredentials.UserName.UserName = "myusername";
client.ClientCredentials.UserName.Password = "mypassword";
API.GetDataResponse response = client.getData(new string[] { "12345" });

代码执行时不会抛出任何异常,但响应为null。如果我将用户名或密码更改为无效的内容,我会收到异常,表明凭据方面的内容正在运行。

如果有人能指出我正确的方向,我将不胜感激!

一些进一步的信息,如果我将其添加为Web引用它可以工作,这让我现在感动,虽然我仍然想知道如何使它在第一个实例中工作。使用网络参考的代码:

WebReference.customerV4Service svc = new WebReference.customerV4Service();
svc.Credentials = new System.Net.NetworkCredential("myusername", "mypassword");
WebReference.GetDataResponse resp = svc.getData(new string[] { "12345" });

0 个答案:

没有答案