WCF服务在Postman中工作但在VB.NET网站中失败

问题描述 投票:0回答:1

我已经创建了我的第一个WCF服务,它在Postman的https中完美运行。

现在,我继续在我的VB.NET网站上使用该服务,我无法让它工作。

这是服务的Web.config

 <system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    <behaviors>
      <serviceBehaviors>
        <behavior name="inculdeExceptionDetails">
          <serviceDebug includeExceptionDetailInFaults="true " />
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="https">
          <security mode="Transport">
            <transport clientCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="http" />
      <add binding="webHttpBinding" scheme="https" bindingConfiguration="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

我在客户端尝试了很多东西。但是我现在的观点是,我可以初始化类,但是当我去调用函数时,我得到:

The provided URI scheme 'https' is invalid; expected 'http'.

这是我当前的web.config:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBinding_ICustomZendeskWrapper">
          <security mode="None">
              <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

    <client>
      <endpoint address="https://www.myDomain.info/Webservices/WCF/CustomZendeskWrapper.svc" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_ICustomZendeskWrapper"   contract="CustomZendeskWrapper.ICustomZendeskWrapper" />
    </client>
  </system.serviceModel>

有人能指出我正确的方向吗?

这是我更正的设置:

服务Web.Config:

<system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    <behaviors>
      <serviceBehaviors>
        <behavior name="inculdeExceptionDetails">
          <serviceDebug includeExceptionDetailInFaults="true " />
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="https">
          <security mode="Transport">
            <transport clientCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="http" />
      <add binding="webHttpBinding" scheme="https" bindingConfiguration="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

客户端Web.Config:

 <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBinding_ICustomZendeskWrapper">
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webhttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <client>
      <endpoint address="https://www.myDomain.info/Webservices/WCF/CustomZendeskWrapper.svc" binding="webHttpBinding" bindingConfiguration="webHttpBinding_ICustomZendeskWrapper" behaviorConfiguration="webhttp"   contract="CustomZendeskWrapper.ICustomZendeskWrapper" />
    </client>
  </system.serviceModel>
vb.net wcf postman
1个回答
1
投票

首先,您的配置文件使用WebHttpBinding创建服务,因此您的服务可以在REST样式中通过http和https正常工作。我们应该使用WebHttpBinding来调用服务或将http请求发送到正确的URL而不是使用BasicHttpBinding。 在这种情况下,如果您想通过添加服务引用来调用服务,就像您的配置一样。我建议你做出以下改变。

  1. 在客户端的webconfig中使用WebHttpBinding而不是BasicHttpBinding。
  2. 将适当的属性添加到自动生成的操作中。 [WebGet],[WebInvoke]
  3. 将webhttp端点行为添加到客户端端点。

这可行,但我不认为这是你想要的。如您所知,只有当服务器和客户端之间的wcf绑定类型一致时,才会成功调用服务。这种情况的另一个解决方案是使用BasicHttpBinding创建服务。它也适用于http和http。 请参考我的以下配置。 服务器端。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpBinding" scheme="http"/>
      <add binding="basicHttpsBinding" scheme="https"/>
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

客户端

//use self-signed certificate
   ServicePointManager.ServerCertificateValidationCallback += delegate
            {
                return true;
            };
            ServiceReference2.Service1Client client = new ServiceReference2.Service1Client("BasicHttpsBinding_IService1");
            var result=client.GetData(234);
            Console.WriteLine(result);

配置文件。

  <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" />
                <binding name="BasicHttpsBinding_IService1">
                    <security mode="Transport" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://vabqia593vm:11024/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference2.IService1"
                name="BasicHttpBinding_IService1" />
            <endpoint address="https://localhost:11025/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpsBinding_IService1" contract="ServiceReference2.IService1"
                name="BasicHttpsBinding_IService1" />
        </client>
    </system.serviceModel>

另外,我们应该在IIS绑定模块中添加http绑定和https绑定。 enter image description here

如果有什么我可以帮忙,请随时告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.