我想用一个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服务?