Я борется с попыткой получить данные из службы WCF без везения, я был бы признателен за вашу помощь, это мой код, и я всегда получаю «0 undefined» в функции ошибки в Ajax вызова:Использовать службу WCF с помощью jQuery
Service1.svc.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public string GetData()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string output = "It worked";
return serializer.Serialize(output);
}
}
IService1.cs
[OperationContract]
[System.ServiceModel.Web.WebInvoke(Method = "POST",
ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
string GetData();
Web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="ServiceBehavior" name="MyService.Service1">
<endpoint address="" binding="webHttpBinding" contract="MyService.IService1" behaviorConfiguration="ServiceAspNetAjaxBehavior">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</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>
JQuery вызов
<script type="text/javascript">
$(document).ready(function() {
CallMyService();
});
function CallMyService() {
$.ajax({
type: "POST",
url: "http://localhost:54368/Service1.svc/GetData",
data: '',
dataType: "json",
contentType: "application/json",
success: ServiceSucceeded,
error: ServiceFailed
});
}
function ServiceFailed(result) {
alert(result.status + ' ' + result.statusText);
}
function ServiceSucceeded(result) {
var resultObject = result.GetDataResult;
alert(resultObject);
}
</script>
Если я пытаюсь потреблять службы WCF из C# проекта, добавив ссылки на службу, я получаю это:
Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт myReference.IService1 в разделе конфигурации клиента ServiceModel. Возможно, это связано с тем, что файл конфигурации не найден для вашего приложения или потому, что элемент-конечный элемент, соответствующий этому контракту, не найден в клиентском элементе.
Не может быть связано с этой ошибкой? Служба WCF размещается в IIS локально.
Я просто не знаю, что еще проверить.
UPDATE:
Я просто нашел решение, то получается, что мне нужно в файл Global.asax в решении WCF службы со следующим кодом:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
Где находится локальный где находится ваша служба WCF, после этого она работает! Большое спасибо вам обоим, кто рассказал мне об отладчике Javascript, который дал мне ключ!
result.GetDataResult дает вам эту ошибку. Вы можете отлаживать свой javascript из Google Chrome и видеть, какие значения возвращаются из результата. – Hakunamatata
Я только что изменил его на: успех: функция (результат) { \t \t \t \t alert (result.d); \t \t \t \t} с тем же результатом. Как отлаживать код javascript из Google chrome? – saman0suke
Вместо использования 'alert (resultObject)' в вашем сценарии jQuery используйте 'console.log (result)'. Затем вы можете просмотреть результат в своей консоли разработчика, которую вы обычно открываете с помощью клавиши «F12». Найдите вкладку «Консоль» в открывшейся панели. – Schlaus