0

我需要在我正在编写的模块中使用现有的 SOAP-Webservice。

我的模块的 web.config 包含:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="WebShopServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://10.0.0.123/LCWebservices/LC.MiscService/webshopservice.asmx"
    binding="basicHttpBinding" bindingConfiguration="WebShopServiceSoap"
    contract="LCWebshopServiceReference.WebShopServiceSoap" name="WebShopServiceSoap" />
</client>

但我的模块抛出

Oops. Something went wrong ... sorry
An unhandled exception has occurred and the request was terminated. 
Please refresh the page. If the error persists, go back

Es wurde kein standardmäßiges Endpunktelement gefunden, das auf den Vertrag
 "LCWebshopServiceReference.WebShopServiceSoap" im ServiceModel-
Clientkonfigurationsabschnitt verweist. 
Dies kann folgende Ursachen haben: Für die Anwendung wurde keine 
Konfigurationsdatei gefunden, oder im Clientelement wurde kein 
Endpunktelement gefunden, das diesem Vertrag entsprach.

这大致翻译为找不到端点元素。我怀疑这是因为这个 web.config 不驻留在 Orchard-Root 中。

最好的办法是什么?

谢谢莱因哈德

4

1 回答 1

0

您可以使用 web.config 使用

Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(
                new ExeConfigurationFileMap { ExeConfigFilename = HostingEnvironment.ApplicationPhysicalPath + @"/Modules/MyModule/Web.config" }, ConfigurationUserLevel.None);

        var factory = new ConfigurationChannelFactory<IMyService>("IMyService", configuration, null);
        var client = factory.CreateChannel();
        client.MyMethod();

但我不建议这样做,基本上您必须使用自己的设置扩展 siteSettings 内容部分并将地址和绑定信息存储在那里。然后在您自己的 IoC 服务类中使用这些设置。

服务类可以创建绑定和 ChannelFactory 来调用 web 服务。

var factory = new ChannelFactory<WorkflowServiceRef.IWorkflowService>(
             binding,
             new EndpointAddress(endpointUri));
factory.Credentials.SupportInteractive = false;
factory.ConfigureChannelFactory();
var channel = factory.CreateChannel();

channel.MyMethod()
于 2012-08-16T08:57:26.427 回答