使用 Ajax 调用 WCF - 404 错误
Calling WCF with Ajax - 404 Error
我一直在尝试遵循此 article 并创建一个 WCF 服务以通过 Ajax 调用进行访问。我的 Ajax 电话收到 404,我不知道为什么,因为它看起来没问题。有人可以帮我修复 404 错误并告诉我哪里有命名空间或其他错误吗?
在有人对我大吼大叫之前,我从未创建过 WCF 服务(更不用说从 Ajax 调用它了)所以我正在关注这篇文章,其中说现在不要担心接口 :)
namespace SearchService
{
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Search
{
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string SearchFiles(string searchText)
{
StringBuilder result = new StringBuilder();
try
{
string currentFolder = Path.GetDirectoryName(@"C:\somefolder\views\filteredViews\");
string[] files = Directory.GetFiles(currentFolder, "*.htm");
foreach (string file in files)
{
string contents = File.ReadAllText(file);
if (contents.Contains(searchText))
{
result.AppendLine(file);
result.Append("|");
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return result.ToString();
}
}
}
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SearchServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webEndPointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="SearchService.Search" behaviorConfiguration="SearchServiceBehavior">
<endpoint address=""
contract="SearchService.Search"
binding="webHttpBinding"
behaviorConfiguration="webEndPointBehavior"
name="webEndPoint" />
</service>
</services>
</system.serviceModel>
var Type;
var Url;
var Data;
var ContentType;
var DataType;
var ProcessData;
$("#searchButton").click(function () {
var searchText = $("#searchText").val();
Type = "POST";
Url = "Search.svc/SearchFiles";
Data = '{"' + searchText + '"}';
ContentType = "application/json; charset=utf-8";
DataType = "json";
varProcessData = true;
CallService();
});
// Function to call WCF Service
function CallService() {
$.ajax({
type: Type, //GET or POST or PUT or DELETE verb
url: Url, // Location of the service
data: Data, //Data sent to server
contentType: ContentType, // content type sent to server
dataType: DataType, //Expected data format from server
processdata: ProcessData, //True or False
success: function(msg) { //On Successfull service call
ServiceSucceeded(msg);
},
error: ServiceFailed // When Service call fails
});
}
function ServiceFailed(result) {
alert('Service call failed: ' + result.status + '' + result.statusText);
Type = null;
varUrl = null;
Data = null;
ContentType = null;
DataType = null;
ProcessData = null;
}
function ServiceSucceeded(result) {
if (DataType == "json") {
alert("It worked" + result);
}
}
function ServiceFailed(xhr) {
if (xhr.responseText) {
var err = xhr.responseText;
if (err)
error(err);
else
error({ Message: "Unknown server error." })
}
return;
}
嗯,看来我的服务设置正确。当我试图从 Ajax 调用它时出现了问题。似乎不是把它放在 Ajax 调用中:
Url = "Search.svc/SearchFiles";
我需要在 Ajax 调用中包含这个:
url: "http://localhost:57761/Search.svc/SearchFiles"
除非我在搜索中遗漏了这个(或者我仍然错了),否则就是全部了。
如果有人想进一步解释这一点(或者特别添加一个 link 来解释差异),请做。
我一直在尝试遵循此 article 并创建一个 WCF 服务以通过 Ajax 调用进行访问。我的 Ajax 电话收到 404,我不知道为什么,因为它看起来没问题。有人可以帮我修复 404 错误并告诉我哪里有命名空间或其他错误吗?
在有人对我大吼大叫之前,我从未创建过 WCF 服务(更不用说从 Ajax 调用它了)所以我正在关注这篇文章,其中说现在不要担心接口 :)
namespace SearchService
{
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Search
{
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string SearchFiles(string searchText)
{
StringBuilder result = new StringBuilder();
try
{
string currentFolder = Path.GetDirectoryName(@"C:\somefolder\views\filteredViews\");
string[] files = Directory.GetFiles(currentFolder, "*.htm");
foreach (string file in files)
{
string contents = File.ReadAllText(file);
if (contents.Contains(searchText))
{
result.AppendLine(file);
result.Append("|");
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return result.ToString();
}
}
}
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SearchServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webEndPointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="SearchService.Search" behaviorConfiguration="SearchServiceBehavior">
<endpoint address=""
contract="SearchService.Search"
binding="webHttpBinding"
behaviorConfiguration="webEndPointBehavior"
name="webEndPoint" />
</service>
</services>
</system.serviceModel>
var Type;
var Url;
var Data;
var ContentType;
var DataType;
var ProcessData;
$("#searchButton").click(function () {
var searchText = $("#searchText").val();
Type = "POST";
Url = "Search.svc/SearchFiles";
Data = '{"' + searchText + '"}';
ContentType = "application/json; charset=utf-8";
DataType = "json";
varProcessData = true;
CallService();
});
// Function to call WCF Service
function CallService() {
$.ajax({
type: Type, //GET or POST or PUT or DELETE verb
url: Url, // Location of the service
data: Data, //Data sent to server
contentType: ContentType, // content type sent to server
dataType: DataType, //Expected data format from server
processdata: ProcessData, //True or False
success: function(msg) { //On Successfull service call
ServiceSucceeded(msg);
},
error: ServiceFailed // When Service call fails
});
}
function ServiceFailed(result) {
alert('Service call failed: ' + result.status + '' + result.statusText);
Type = null;
varUrl = null;
Data = null;
ContentType = null;
DataType = null;
ProcessData = null;
}
function ServiceSucceeded(result) {
if (DataType == "json") {
alert("It worked" + result);
}
}
function ServiceFailed(xhr) {
if (xhr.responseText) {
var err = xhr.responseText;
if (err)
error(err);
else
error({ Message: "Unknown server error." })
}
return;
}
嗯,看来我的服务设置正确。当我试图从 Ajax 调用它时出现了问题。似乎不是把它放在 Ajax 调用中:
Url = "Search.svc/SearchFiles";
我需要在 Ajax 调用中包含这个:
url: "http://localhost:57761/Search.svc/SearchFiles"
除非我在搜索中遗漏了这个(或者我仍然错了),否则就是全部了。
如果有人想进一步解释这一点(或者特别添加一个 link 来解释差异),请做。