Я создал спокойную службу и смог создать ответ JSON при получении XML запросов, но мне нужно было, чтобы он принимал JSON запросов. Я настроил процессы, но у меня были проблемы, потому что у меня изначально был основной сервис, вызывающий несколько сервисов, каждый со своим собственным C# интерфейсом. Он сказал мне, что я должен был явно назвать конечные точки, и все это пошло в кучу tra sh после этого. В конце концов я отказался от вызова нескольких служб и вместо этого перешел к одной службе с несколькими контрактами операций, вызывающими методы.
Теперь я просто получаю простое сообщение «конечная точка не найдена». Я действительно, действительно не понимаю все входы и выходы определений конечных точек.
Вот код на моей главной странице обслуживания (AgtDa sh .sv c). Мы вызываем статистику для «инструментальной панели агента»
EDIT - обновил код, чтобы отразить ссылку на шаблон URI, которая не была изменена, и изменил ссылку на имя службы в web.config. Теперь ошибка больше не «конечная точка не найдена», а ссылка 404.
namespace AgentDashboard
{
public class AgtDash : dashboardInfo
{
public string GetAgencyInfo(agcInfoInput agcInput)
{
string agInfo = string.Empty;
(RETRIEVES DATA TABLE)
agInfo = tableToJson(agcTable);
return agInfo;
}
public string GetAgencyDetails(agcInfoInput agcInput)
{
string agcyInfo = string.Empty;
(RETRIEVES DATA TABLE)
agcyInfo = tableToJson(agcTable);
return agcyInfo;
}
public string GetAgencyTotals(agcInfoInput agcInput)
{
string agcyTot = string.Empty;
(RETRIEVES DATA TABLE)
agcyTot = tableToJson(agcTable);
return agcyTot;
}
public string GetAgentTotals(agtInfoInput agtInput)
{
(RETRIEVES DATA TABLE)
agtInfo = tableToJson(agTable);
return agtInfo;
}
public string tableToJson(DataTable inpTable)
{
var jsString = new StringBuilder();
(CONVERTS DATA TABLE TO JSON RESPONSE)
return jsString.ToString();
}
}
}
Вот мой интерфейс:
namespace AgentDashboard
{
[ServiceContract]
public interface dashboardInfo
{
[OperationContract]
[WebInvoke(UriTemplate="/GetAgentTotals",
Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
string GetAgentTotals(agtInfoInput agentInput);
[OperationContract]
[WebInvoke(UriTemplate="/GetAgencyInfo",
Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
string GetAgencyInfo(agcInfoInput agencyInput);
[OperationContract]
[WebInvoke(UriTemplate="/GetAgencyDetails",
Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
string GetAgencyDetails(agcInfoInput agencyInput);
[OperationContract]
[WebInvoke(UriTemplate="/GetAgentTotals",
Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
string GetAgencyTotals(agcInfoInput agencyInput);
}
[DataContract]
public class agtInfoInput
{
[DataMember]
public string id { get; set; }
[DataMember]
public int year { get; set; }
}
[DataContract]
public class agcInfoInput
{
[DataMember]
public int id { get; set; }
[DataMember]
public int year { get; set; }
}
}
Моя веб-конфигурация:
<system.serviceModel>
<client>
<endpoint binding="webHttpBinding" contract="AgentDashboard.dashboardInfo" />
</client>
<services>
<service name="AgentDashboard.AgtDash">
<endpoint address="dashboardInfo" binding="webHttpBinding" behaviorConfiguration="webBehavior" contract="AgentDashboard.dashboardInfo" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="AgtDash.svc" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<webHttpBinding>
<binding>
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Я уверен, что web.config - это случайный беспорядок. Когда мне нужно определить сервис с подробными данными о конечной точке? Когда я использую конфигурацию клиента? Когда я использую оба? Казалось, что он работал локально нормально, когда у меня изначально было несколько клиентских конечных точек, но когда мне сказали, что я должен определить службу, я пошел по этому пути.
Извините, если есть ответы, но все они очень разные в решениях и не дают мне много понимания почему. В конечном итоге он будет находиться в своем собственном веб-приложении / каталоге, обслуживаемом IIS, и должен получать и отправлять JSON. Генерация ответа JSON, кажется, работает, она правильно идентифицирует конечные точки, что мешает мне полностью протестировать это, потому что я не могу правильно определить цель, так сказать.
Если что-то о web.config выскакивает на вас, дайте мне знать. Заранее спасибо.
ТЕКУЩАЯ ОШИБКА: