代码之家  ›  专栏  ›  技术社区  ›  NealWalters

Powershell新WebServiceProxy-如何调用WCF服务

  •  0
  • NealWalters  · 技术社区  · 5 年前

    这是迄今为止我在网上找到的几个杂项示例:

    # Create the WebSvcURL variable and pass the WSDL URL
    $WebSvcURL= “http://localhost/DEMO/SetPassKey/SetPassKey_Logic_SetPassKeyWebService_SetPassKeyWCF.svc?wsdl“
    
    #Create the Web Service Proxy Object
    
    #$serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -Namespace "http://Sample.SetPassKey.Logic" -Class Program -UseDefaultCredential
    $serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -UseDefaultCredential
    
    # Create Request Object
    $namespace = $serviceProxy.getType().namespace
    write-host "Namespace=$namespace"
    $req  = New-Object ($namespace + "/SetPassKeyOrchWebRequest")  
    $resp = New-Object ($namespace + "/SetPassKeyOrchWebResponse")  
    
    $req.NewPassKey = "TEST"    # <--- PUT YOUR NEW PASSWORD HERE 
    
    $resp = $serviceProxy.SetPassKey($req) 
    
    $resp 
    

    我对几件事感到困惑:

    1. 如果需要在上包含-Namespace和-Class参数。由于它查看WSDL,我不理解为什么它需要-Namespace和-Class。
    2. 如何构造请求/响应对象

    更新: blog 其中指出:

    我认为它是一个XML名称空间,但它是一个XML名称空间。NET框架命名空间。

    # Create the WebSvcURL variable and pass the WSDL URL
    $WebSvcURL= “http://localhost/DEMO/SetPassKey/SetPassKey_Logic_SetPassKeyWebService_SetPassKeyWCF.svc?wsdl“
    
    #Create the Web Service Proxy Object
    
    $serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -UseDefaultCredential -Namespace "MyNamespace" -Class Program 
    
    # Create Request Object
    $req  = New-Object ("MyNamespace.SetPassKeyOrchWebRequest")  
    $resp = New-Object ("MyNamespace.SetPassKeyOrchWebResponse")  
    
    $req.NewPassKey = "TEST"    # <--- PUT YOUR NEW PASSWORD HERE 
    
    $resp = $serviceProxy.SetPassKey($req) 
    
    $resp 
    

    现在我得到了这个错误: 使用“1”参数调用“SetPassKey”时出现异常:“基础连接已关闭:服务器上发生意外错误。” 接收"

    0 回复  |  直到 5 年前
        1
  •  0
  •   NealWalters    5 年前

    我尝试了一些东西,最后终于成功了。 我确实将绑定从WCF WSHttp更改为WCF BasicHttp。

    我也遵循了这一点 post ,这表示他们只通过使用自动生成的名称空间使其工作。

    我仍然对-namespace和-class参数感到困惑,因为上面的帖子说它只通过使用自动生成的名称空间(省略-namespace parm时会发生这种情况)才能使进程工作。

    我的代码最终是这样的:

    # Create the WebSvcURL variable and pass the WSDL URL
    $WebSvcURL= “http://localhost/DEMO/SetPassKey/SetPassKey_Logic_SetPassKeyWebService_SetPassKeyWCF.svc?wsdl“
    
    #Create the Web Service Proxy Object
     $serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -UseDefaultCredential
    
    $autoGenNamespace = $serviceProxy.getType().namespace
    write-host "Namespace=$namespace"
    $req  = New-Object ($autoGenNamespace + ".SetPassKeyOrchWebRequest")  
    $resp = New-Object ($autoGenNamespace + ".SetPassKeyOrchWebResponse")  
    
    $req.NewPassKey = "TEST"    # <--- PUT YOUR NEW PASSWORD HERE 
    
    $req.NewPassKey = "TEST"      # <--- PUT YOUR NEW PASSWORD HERE 
    Write-Host "Request:"
    Write-Host ($req | Format-Table | Out-String)
    
    Write-Host "About to call WebService" 
    $resp = $serviceProxy.SetPassKey($req) 
    
    
    Write-Host "Response:"
    Write-Host ($resp | Format-Table | Out-String)
    

    推荐文章