使用没有 app.config 的 .net 2.0 Web 服务的一般问题
请原谅我的英语不好:
我已经做了什么:
我编写了一个测试控制台应用程序,它与存储在 app.config 中的预配置 Web 连接连接,这很好用:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="XpageServiceSoap">
<security mode="Transport" />
</binding>
<binding name="XpageServiceSoap1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://www.anydomain.com/XpageService.asmx"
binding="basicHttpBinding" bindingConfiguration="XpageServiceSoap"
contract="XsysService.XpageServiceSoap" name="XpageServiceSoap" />
</client>
</system.serviceModel>
</configuration>
现在我想构建一个也可以与 COM 一起使用的程序集。尝试调用 DLL 函数会导致错误,因为无法为 DLL 提供 app.config。
我想在我的 DLL 中包含连接信息。所以我尝试了以下方法:
[ServiceContract]
interface IXsysService
{
[OperationContract]
string userpswd(string user, string passwort);
[OperationContract]
string pagesource(string page, string tokenxml, string ip);
}
并从主要调用:
EndpointAddress address = new EndpointAddress("https://www.anydomain.com/XpageService.asmx");
WSHttpBinding bind = new WSHttpBinding(SecurityMode.Transport);
ChannelFactory<IXsysService> factory = new ChannelFactory<IXsysService>(bind, address);
IXsysService proxy = factory.CreateChannel();
using (proxy as IDisposable)
{
Console.WriteLine("Abruf: {0}", proxy.userpswd("user",GetPasswortFromConsole())); // exception!
Console.ReadLine();
}
代理似乎通过 SSL 成功连接。但是当调用 userpswd() 我收到以下异常(从德语翻译):
“System.Web.Services.Protocols.SoapException:如果没有有效的操作参数,则无法处理请求。请指定有效的 SOAPAction 对象。”
当我尝试这个时:
EndpointAddress address = new EndpointAddress("https://www.anydomain.com/XpageService.asmx?wsdl");
我得到同样的例外。
可能是我对我的尝试完全错误。
有人对我如何解决这个问题有任何建议吗?我需要一个无需任何 app.config 即可连接到 Web 服务的程序集。