Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WCF服务在本地工作,但在服务器上提供404_Javascript_C#_Wcf - Fatal编程技术网

Javascript WCF服务在本地工作,但在服务器上提供404

Javascript WCF服务在本地工作,但在服务器上提供404,javascript,c#,wcf,Javascript,C#,Wcf,我看过很多关于这方面的帖子,但似乎都找不到答案 [免责声明:我对WCF了解不多-虽然我可以访问代码,但这是我正在尝试连接的现有项目。] 我已经创建了一个html/javascript客户端来访问现有的WCF服务API。每个都是独立的应用程序,因此当我在本地运行时,客户端和服务器都在本地主机上运行,但端口号不同。这很有效。客户端应用程序可以通过以下调用调用WCF服务:https://localhost:4435/sessions.svc/getsession?sessionPK=3. 当我在一

我看过很多关于这方面的帖子,但似乎都找不到答案

[免责声明:我对WCF了解不多-虽然我可以访问代码,但这是我正在尝试连接的现有项目。]

我已经创建了一个html/javascript客户端来访问现有的WCF服务API。每个都是独立的应用程序,因此当我在本地运行时,客户端和服务器都在本地主机上运行,但端口号不同。这很有效。客户端应用程序可以通过以下调用调用WCF服务:https://localhost:4435/sessions.svc/getsession?sessionPK=3.

当我在一台服务器上安装这两个应用程序时,这两个应用程序都作为不同的虚拟应用程序运行在同一台服务器上,服务确实在运行-我可以点击https://myserver.com/api/sessions.svc 从网络浏览器中,我从服务返回一个页面,告诉我它正在工作

但是,现在当客户端尝试以与本地相同的方式访问服务时https://myserver.com/api/sessions.svc/getsession?sessionPK=3,我得到一个404未找到错误

客户端和WCF服务都托管在具有相同根域的同一台服务器上,因此CORS不应该成为问题

以下是一些代码片段:

**WCF服务**

[服务合同] 公共接口会话 { [经营合同] [WebInvokeMethod=GET,RequestFormat=WebMessageFormat.Json,ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped] 字符串GetSessionint?sessionPK; [AspNetCompatibilityRequirementsRequirementsMode=AspNetCompatibilityRequirementsMode.Allowed] 公开课程:基本服务、ISessions { 公共字符串GetSessionint sessionPK { ... } } **服务的Web.Config**

**客户**

导出类数据服务{ 构造函数私有http:HttpClient{ this.http.configureconfig=>{ config.withBaseUrlhttps://myserver.com/api/; config.withHeaderAccept,application/json; config.withHeaderContent-Type,application/json; config.withCredentialstrue; } } 公共异步GetSessionById:number=0{ 试一试{ 让result=this.http.get`sessions.svc/getsession?sessionPK=${id}`; if!result.issucess 投掷反应; ... } 错误:有吗{ ... } } 更新

对于Peter,我也得到了同样的回应https://myserver.com/api/sessions.svc 就像我从https://myserver.com/api/sessions.svc?wsdl. 这是一个这样的页面:


该服务似乎没有返回其公开的操作列表。顺便说一句,它在本地主机上的执行方式完全相同。

如果CORS不是问题,则访问服务的URI或格式可能错误。您可以在该服务中打开帮助文档,查看如何请求接口:

        <endpointBehaviors>
            <behavior name="ESEndPointBehavior">
                <webHttp helpEnabled="true"/>
            </behavior>
        </endpointBehaviors>
      [OperationContract]
    [WebGet(UriTemplate = "user/?name={name}",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Result GetUserData(string name);
我没有将bodystyle设置为WebMessageBodyStyle.Wrapped,因为WebMessageBodyStyle.Wrapped主要用于封装body,但get方法中没有body。并设置WebMessageBodyStyle。Wrapped帮助文档将不会生成正确的请求格式。如下所示:

普通帮助文档应如下所示:


它包含请求的URI和格式。

结果是,我在服务器上本地运行HTTP和HTTPS。我通过添加以下内容解决了问题:


您是否检查了当您点击url时显示的wsdl文件是否包含getsession消息?@PeterCsala,请查看我的更新以了解详细信息,请尝试使用mex,而不是wsdl,因为您是使用mex而不是wsdl公开的。