未找到 WCF 端点/不允许使用 Windows 服务的方法

Posted

技术标签:

【中文标题】未找到 WCF 端点/不允许使用 Windows 服务的方法【英文标题】:WCF endpoint not found/method not allowed using Windows Service 【发布时间】:2018-01-07 07:35:44 【问题描述】:

我想在 Windows 服务上托管我的 WCF Web 服务,以便前端可以访问这些方法。

如果我在 VS 中单击服务(在浏览器中查看),服务运行良好。但是当我厌倦了使用 Windows 服务托管它时,当我使用基地址时它会从浏览器返回“找不到端点”,而当我指定要访问的方法时它会返回“方法不允许”。

以下是我的代码: Host的App.Config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
	</startup>
	<system.serviceModel>
		<behaviors>
			<serviceBehaviors>
				<behavior name="mexBehavior">
					<serviceMetadata httpGetEnabled="true" />
				</behavior>
			</serviceBehaviors>
			<endpointBehaviors>
				<behavior name="jsonBehavior">
					<webHttp defaultOutgoingResponseFormat="Json" />
				</behavior>
			</endpointBehaviors>
		</behaviors>
		<services>
			<service behaviorConfiguration="mexBehavior" name="BestWebService.Service1">
				<host>
					<baseAddresses>
						<add baseAddress="http://localhost/Service1.svc"/>
					</baseAddresses>
				</host>
				<endpoint address="" binding="webHttpBinding" behaviorConfiguration="jsonBehavior"
						  contract="BestWebService.IService1" 
						  bindingConfiguration="jsonBinding">
					<identity>
						<dns value="localhost" />
					</identity>
				</endpoint>
			</service>
		</services>
		<bindings>
			<webHttpBinding>
				<binding name="jsonBinding">
					<security mode="None">
						<transport clientCredentialType="None"/>
					</security>
				</binding>
			</webHttpBinding>
		</bindings>
	</system.serviceModel>
</configuration>

Service.cs

        protected override void OnStart(string[] args)
        
            if (host != null) 
                host.Close();
            
            try
            
                host = new ServiceHost(typeof(BestWebService.Service1));
                host.Open();
            
            catch (Exception e) 
                string stored = @"c:\\SETUP ERROR.txt";
                using (StreamWriter sw = File.AppendText(stored))
                
                    sw.WriteLine("1: 0", e.ToString());
                
                host.Close();
            
        

WCF 服务接口

public interface IService1
    

        [OperationContract]
        [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat =WebMessageFormat.Json)]

        List<WKSTEnviornment> GetWKSTDetails();
    

javascript

getAllVersions = function (id) 
	$.ajax(
		url: 'http://localhost/Service1.svc/GetWKSTDetails',
		method: 'post',
		contentType: 'application/json; charset=utf-8',
		dataType: 'json',
		success: function (data) 
			var verlist = new Array();
			var appname = new Array();
			var applications = new Array();
			var name = null;
			var Object = ;
			$.each(data.d, function (i) 
				var apps = data.d[i]["AppList"].split('_');
				verlist.push(data.d[i]["Version"]);
				$.each(apps, function (i) 
					appname.push(apps[i]);
				)
				appname.sort();
				var ver = data.d[i]["Version"];
				Object[ver] =  Date: data.d[i]["Date"], Applist: appname ;
				appname = [];
			);
			versionlist = Object;
			getversion = true;
			createDeployPanel(Object, verlist, id);
		,
		error: function (data) 
			alert(JSON.stringify(data) + 'Get Versions Failed');
		
	);

谢谢!!

【问题讨论】:

Z IService1 没有用 [ServiceContract] 属性修饰..你能检查一下吗? 是的,我忘记加行了 【参考方案1】:

我无法弄清楚 Windows 服务的问题(该服务已成功托管)所以我将其切换到 IIS(配置和 CORS 也花了我一些时间来解决),现在它正在工作:)

【讨论】:

以上是关于未找到 WCF 端点/不允许使用 Windows 服务的方法的主要内容,如果未能解决你的问题,请参考以下文章

ProtocolException Unhandled/(405) WCF 不允许的方法;绑定和端点看起来不错

WCF 请求失败,HTTP 状态为 405:不允许方法

WCF 托管在 IIS6 上

进行依赖注入时未找到 WCF 引用

仅在通过 Windows 服务使用 WCF 时“无端点侦听”

客户端在 Windows 服务内找不到 WCF 的端点元素