如何在浏览器中使用WCF?

时间:2017-04-12 02:54:28

标签: c# .net wcf

我想用一个GET函数构建一个简单的服务,它接受来自浏览器AJAX请求的JSON并返回一个文件。我可以使用的工具之一是Visual Studio 2017和WCF听起来像是一个不错的赌注。

我一直在试图从这个框架中挤出任何功能。在线教程要么太高,要么我的理解不够,或者解决方案已经过时了。我想要求的是关于WCF的一些基本指示,它应该如何使用,不应该如何使用,与对网络原理知之甚少的人交谈。但这是一个非常广泛的范围。

为了保持一个狭窄的例子,这是Visual Studio为WCF项目提供的新的源模板,开箱即用。

Service1.svc:

using System;

namespace BasicWcfProject
{
    public class Service1 : IService1
    {
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite == null)
            {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
    }
}

IService1.cs:

using System.Runtime.Serialization;
using System.ServiceModel;

namespace BasicWcfProject
{
    [ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }


    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }
}

Web.Config中:

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2"/>
  </system.web>
  <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="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 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:56586/Service1.svc,我会得到基本的服务响应。好的,很酷。我的直觉告诉我,然后我应该访问http://localhost:56586/Service1.svc/GetData/1来测试GetData方法,对吗?据说不是。我得到一个完全空洞的回应。我在方法中放置了断点,但它们没有触发。我已尝试将访问网址更改为http://localhost:56586/Service1.svc/GetData。我试过用UriTemplate来装饰这个方法。什么都行不通。

显然我做错了什么,但是我已经无可救药地失去了我无法开始告诉我需要去哪里。我发现试图指示我去哪里的任何资源要么对我来说太技术性,要么只是平坦的解决方案在尝试时不起作用。这真的让我的士气低落。

如何让Web浏览器使用此WCF服务?

0 个答案:

没有答案