gpt4 book ai didi

wcf - 如何从浏览器访问 WCF 服务方法?

转载 作者:行者123 更新时间:2023-12-04 17:34:44 33 4
gpt4 key购买 nike

这是默认向导在 Visual Studio 2013 中创建的代码。
在项目属性中,我设置为使用本地 IIS。
WCF 测试客户端测试成功。
但是如果我访问页面

http://localhost/WcfService1/Service1.svc/GetTime

在浏览器中,我看到空的浏览器屏幕,Fiddler 显示“HTTP/1.1 400 Bad Request”。
我知道我需要修改 web.config,以及接口(interface)中方法的属性,但不知道如何。你可以帮帮我吗?谢谢你。

IService1.cs
using System.Runtime.Serialization;
using System.ServiceModel;
namespace WcfService1
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetTime();
}
}

服务1.svc.cs
using System;
namespace WcfService1
{
public class Service1 : IService1
{
public string GetTime()
{
return DateTime.Now.ToShortTimeString();
}
}
}

网络配置
<?xml version="1.0"?>
<configuration>

<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>

</configuration>

最佳答案

感谢 sakir 和 Tim,您的评论让我可以在适当的地方寻找答案。是的,这是 SOAP 服务,所以我需要重新配置它才能通过 web http 访问。

  • 我在 web.config
  • 中添加了允许 HttpBinding 的“行为”部分和此行为的配置
  • 我将属性 [WebGet] 添加到要在浏览器中显示的方法中。

  • 注意:我们可以在 Visual Studio 中得到类似的结果,如果我们将通过添加空项目“WCF 服务(启用 Ajax)”模板来创建 WCF Web 服务(我在 VS2013 中很难找到,但在 VS2012 中它在顶部作为一个单独的项目)。这将为我们修改 web.config,并给出工作代码示例(但不是基于接口(interface))。

    Adding WCF Service(Ajax-enabled) template to the empty project in VS2013

    修改文件并重新配置 web.config 如下:

    IService1.cs
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    namespace WcfService1
    {
    [ServiceContract]
    public interface IService1
    {
    [OperationContract]
    [WebGet]
    string GetTime();
    }
    }

    网络配置
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>

    <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    </appSettings>
    <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
    </system.web>
    <system.serviceModel>
    <behaviors>
    <serviceBehaviors>
    <behavior>
    <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
    </serviceBehaviors>

    **<!--added behavior-->
    <endpointBehaviors>
    <behavior name="WcfService1.Service1AspNetAjaxBehavior">
    <enableWebScript />
    </behavior>
    </endpointBehaviors>**

    </behaviors>
    <protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

    **<!--added service behaviour configuration-->
    <services>
    <service name="WcfService1.Service1">
    <endpoint address="" behaviorConfiguration="WcfService1.Service1AspNetAjaxBehavior"
    binding="webHttpBinding" contract="WcfService1.IService1" />
    </service>
    </services>**

    </system.serviceModel>
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
    </system.webServer>

    </configuration>

    关于wcf - 如何从浏览器访问 WCF 服务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314578/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com