配置Web.config以发布WCF服务 [英] Configuring Web.config to publish WCF Service

查看:122
本文介绍了配置Web.config以发布WCF服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从asmx Web服务跃迁到WCF(主要是为了支持与Json的合作)

I am making the jump from asmx webservice to WCF (mostly to support working with Json)

我已经指出,该服务仅在http上有效(仅在本地),而不在https上有效. (在我的服务器上,当服务器强制使用https时,它们都不起作用)

I have gotten to the point that the Service works (locally only) in http only but not https. (On my server neither works as the server forces https)

这是我的简单代码:

MyNewService.VB

Public Class MyNewService
Implements IMyNewService

Public Sub New()
End Sub

Public Function GetResults() As List(Of Person) Implements IMyNewService.GetResults
    Dim rslt As New List(Of Person)

    rslt.Add(New Person("Mike", "Anderson", 40))
    rslt.Add(New Person("Drew", "Carry", 38))
    rslt.Add(New Person("John", "Tavares", 43))

    Return rslt
End Function
End Class

IMyNewService.VB

<ServiceContract()>
Public Interface IMyNewService
    <OperationContract()>
    <WebInvoke(Method:="GET", RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json, UriTemplate:="getPeople")>
    Function GetResults() As List(Of Person)
End Interface

<DataContract()>
Public Class Person
    <DataMember()>
    Public Property FirstName() As String

    <DataMember()>
    Public Property LastName() As String

    <DataMember()>
    Public Property Age() As Integer

    Public Sub New(firstname As String, lastname As String, age As Integer)
        Me.FirstName = firstname
        Me.LastName = lastname
        Me.Age = age
    End Sub
End Class

Web.Config

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2"/>
    <pages>
      <namespaces>
        <add namespace="System.Runtime.Serialization" />
        <add namespace="System.ServiceModel" />
        <add namespace="System.ServiceModel.Web" />
      </namespaces>
    </pages>
  </system.web>
  <system.serviceModel>
        <protocolMapping>
      <add scheme="http" binding="webHttpBinding"/>

    </protocolMapping>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="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>
      <endpointBehaviors>
        <behavior>
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

因此,目前我可以运行: http://localhost:61028/MyNewService.svc/getPeople

So, currently I can run: http://localhost:61028/MyNewService.svc/getPeople

我正确地得到了:

[{"Age":40,"FirstName":"Yoni","LastName":"Sudwerts"},{"Age":38,"FirstName":"Joshua","LastName":"Kishinef"},{"Age":43,"FirstName":"Saul","LastName":"Kaye"}]

但是如果我跑步: https://localhost:44386/MyNewService.svc/getPeople

我收到404错误.

有人能发现我的错误并帮助一个人吗?

Can anyone find my mistake and help a guy out?

预先感谢

推荐答案

通常来说,我添加两个服务端点地址以通过http和https托管服务.
WCF服务未通过https从邮递员命中
或以下简化的配置.

Generally speaking, I add two service endpoint address to host the service over http and https.
WCF Service not hitting from postman over https
Or the following simplified configuration.

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

请随时告诉我是否有什么可以帮忙的.

Feel free to let me know if there is anything I can help with.

这篇关于配置Web.config以发布WCF服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆