1、在项目中添加一个WCF服务
2、将生成的WCFServer和IWCFServer整理到一个文件夹内
3、修改IWCFServer的内容为
先引用System.ServiceModel.Web.dll
using System.ServiceModel;
using System.ServiceModel.Web;
namespace WindowsServerDemo
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IWCFServer”。
[ServiceContract]
public interface IWCFServer
{
[OperationContract]
//[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[WebGet(UriTemplate = "dowork",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
//[WebGet()]
void DoWork();
}
}
4、修改WCFServer的内容如下
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
namespace WindowsServerDemo
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“TestService”。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")]
public class WCFServer : IWCFServer
{
//[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
// BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string DoWork()
{
return "我是一个寄宿在Windows服务中的WCF服务中的一个dowork方法";
}
}
}
5、修改App.Config内容如下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<system.serviceModel>
<services>
<service name="WindowsServerDemo.WCFServer" behaviorConfiguration="WCFServerBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:10086/WCFServer"/>
</baseAddresses>
</host>
<endpoint address="http://localhost:10086/WCFServer"
binding ="webHttpBinding"
contract="WindowsServerDemo.IWCFServer" behaviorConfiguration="web"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WCFServerBehavior" >
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:10086/WCFServer/MetaData"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp helpEnabled="true" />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
6、在windows服务的OnStart方法中开启wcf服务
using System.ServiceModel;
using System.ServiceProcess;
namespace WindowsServerDemo
{
public partial class Service1 : ServiceBase
{
public ServiceHost _host;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//逻辑
_host = new ServiceHost(typeof(WCFServer));
_host.Open();
}
protected override void OnStop()
{
}
}
}
7、重新生成解决方案,并且重新生成setup项目,然后安装服务,确保服务启动
将windows服务打包成安装文件可以参考之前的笔记
https://blog.csdn.net/u011176794/article/details/97935672
8、浏览器输出试一下
9、Jquey调用
$.ajax({
type: "get",
url: "http://localhost:10086/WCFServer/dowork?jsoncallback=?",
dataType: 'jsonp',
jsonp: "jsoncallback",
//contentType: "application/json",
//jsonpCallback: "call",
success: function (data) {
debugger;
console.log(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
debugger;
alert("error");
}
});