所有
我正在尝试进行.net WCF调用,我认为这应该很简单,但事实证明非常困难。我真的可以使用一些帮助,并在完全披露我是一个WCF新手。这是场景:
Web服务架构如下:
<HEADER>
<USERID>myID</USERID>
<PASSWORD>????</PASSWORD>
<LANGUAGE_CD>ENG</LANGUAGE_CD>
</HEADER>
<that>Ithid</that>
<Strcurrent_action>target</Strcurrent_action>
<Strnew_action>action</Strnew_action>
<StractionConfirm>action</StrpasswordConfirm>
</MyAction__This__Stuff_SELF>
我从svcutil生成了C#类和配置文件。 app.config显示如下:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyStuff_Binding" />
</basicHttpBinding>
</bindings>
我使用以下代码拨打电话:
MyStuff_PortTypeClient client = new MyStuff_PortTypeClient(“MyStuff_Port”);
client.ClientCredentials.UserName.UserName =“MyLogon”;
client.ClientCredentials.UserName.Password =“MyPassword”;
MyAction__CompIntfc__USER_PROFILETypeShape actionShape = new MyAction__CompIntfc__USER_PROFILETypeShape();
UserIDTypeShape targetUser = new UserIDTypeShape();
尝试
{client.MyStuff_MyAction(actionShape); //拨打电话}
正如我所提到的,我尝试了很多方法,包括更改basicHttpBinding中的安全性,消息和传输选项,尝试使用wsHttpBinding,自定义标题等......并且没有快乐。
我非常感谢有关如何通过http或https调用用户名和密码保护的PeopleSoft Web服务的任何帮助和成功示例。
由于
答案 0 :(得分:0)
我也遇到了很多麻烦,但是让它发挥作用......有点儿。我不得不手动将标题放在配置文件中,如此...
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="PeopleSoft_Binding">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="MyEndpoint"
bindingConfiguration="PeopleSoft_Binding"
contract="ProxyClass.ProxyClass_PortType"
binding="basicHttpBinding"
address="https://MyPeoplesoftInstance/PeopleSoftServiceListeningConnector">
<headers>
<wsse:Security soap:mustUnderstand="1"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>TheUser</wsse:Username>
<wsse:Password>ThePassword</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</headers>
</endpoint>
</client>
</system.serviceModel>
</configuration>
然后,按正常方式调用它......
using (var client = new MyProxy.MyProxy_PortTypeClient("MyEndpoint"))
{
client.MyMethod();
}
虽然这很有效,但由于凭据存储在配置文件中,因此不太理想。理想情况下,我希望能够以编程方式传递凭据,并且我已尝试了一系列涉及XmlSerializer,WCF配置等的内容,但到目前为止还没有任何工作。希望这个答案会让某人接下来一步。