WCF:无法让我的 Web 服务在服务器上工作

WCF: Cant get my Web service to work, on the server

我的问题是我的 Web 服务 EService 在我的调试项目中运行得非常好,但是当我将它实现到 WinForm 项目中并将该服务放在服务器上时。创建客户端时出现此错误?

An unhandled exception of type 'System.InvalidOperationException' 
occurred in System.ServiceModel.dll

Could not find default endpoint element that references contract '{0}' in the ServiceModel
client configuration section. This might be because no configuration file was found for your application,
or because no endpoint element matching this contract could be found in the client element.

App.config

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IEService" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://Domane.dk/EService.svc" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IEService" contract="IEService"
      name="BasicHttpBinding_IEService" />
</client>

Web.config

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpBinding" scheme="http" />
  <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<bindings>
  <basicHttpBinding>
    <binding name="" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" transferMode="Streamed">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

我这样称呼它

using (var test = new EServiceAPI.EServiceClient())
        {
            test.OpdaterLeastDatoWinPLC(connstr);
        }

我不知道失败的原因。很抱歉成为这样的新手。是的,我已经在互联网上搜索了 2 天,现在正试图找到解决方案。

我认为这与 <endpoint address="http://Domane.dk/EService.svc" 我认为在服务器上使用时应该是相对路径有关。

喜欢: <endpoint address="./EService.svc"

我在 dll 中使用 Web 服务时遇到了同样的问题。 试试这个:

    using (var test = CreateWebServiceInstance("http://url.to.mywebservice.com"))
    {
        test.OpdaterLeastDatoWinPLC(connstr);
    }

在上面的 Web 服务中输入正确的 url 并使用下面的代码创建客户端。您仍然需要将 Web 服务添加到项目中,以便为您创建 class EServiceClient。

    internal static EServiceAPI.EServiceClient CreateWebServiceInstance(string url) {
        BasicHttpBinding binding = new BasicHttpBinding();
        binding.SendTimeout = TimeSpan.FromMinutes(10);
        binding.OpenTimeout = TimeSpan.FromMinutes(1);
        binding.CloseTimeout = TimeSpan.FromMinutes(1);
        binding.ReceiveTimeout = TimeSpan.FromMinutes(20);
        binding.AllowCookies = false;
        binding.BypassProxyOnLocal = false;
        binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
        binding.MessageEncoding = WSMessageEncoding.Text;
        binding.TextEncoding = Encoding.UTF8;
        binding.TransferMode = TransferMode.Buffered;
        binding.UseDefaultWebProxy = true;
        binding.MaxReceivedMessageSize = 5242880;
        return new EServiceAPI.EServiceClient(binding, new EndpointAddress(url));
    }

如果可行,您可以修改以上设置以更好地满足您的需求。