Я работаю над интерфейсом отдыха WCF, используя json. Я поместил службу в службу Windows для размещения службы, но теперь у меня возникают проблемы с вызовом службы. Я не уверен точно, что не так.
Основная идея заключается в том, что я хочу разместить службу на удаленном сервере, поэтому я хочу, чтобы служба была сопоставлена с портом localhost: 7600, чтобы его можно было вызвать, отправив данные на [server_ip]: 7600. Скорее всего, проблема в файле конфигурации, так как я новичок в WCF и Rest, я не был уверен, что печатать для конфигурации, так что извините, если это полный беспорядок.
Я удалил несколько фрагментов кода и комментариев, чтобы его было легче читать. Эти функции не должны иметь отношения к сервису, поскольку они вызывают только функции C #.
РЕДАКТИРОВАТЬ: Я посмотрел предложенный пост и переписал код, но, к сожалению, он все еще не работает. Мэйби, я просто использую неправильный адрес, ты бы вызвал это с http://localhost:7600, верно?
РЕДАКТИРОВАТЬ: Спасибо, ребята за вашу помощь. Проблема заключалась в том, что вы не можете использовать ServiceHost со свойством, которое использует UriTemplate. Так что, если я уберу это, сервис по крайней мере на полпути работает. Я все еще застрял на одной части, хотя. Служба должна вызываться через HTTP-запросы, которые вы можете создавать с помощью Fiddler. Есть идеи, как мне это сделать?
РЕДАКТИРОВАТЬ: NVM, это был глупый вопрос. Отправьте данные на http://localhost:7600/PCMiler_Connect_Imple, и это вернет данные json. Еще раз спасибо, ребята.
РЕДАКТИРОВАТЬ: Так что это было бы более полезно для кого-то еще с такой же проблемой, я добавил код, как это сейчас, с примером вызова json.
Сервисный интерфейс WCF
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Data;
namespace PCMiler_Service
{
[ServiceContract]
public interface IPCMiler_Connect
{
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json), //code corrected
OperationContract]
List<string> PCMiler_Connect_Imple(ZIP_List_Container container);
}
}
Реализация службы WCF
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace PCMiler_Service
{
[DataContract]
public class ZIP_List_Container
{
[DataMember]
public string[] ZIP_List { get; set; }
[DataMember]
public string Optimized { get; set; }
[DataMember]
public string Calc_Type { get; set; }
[DataMember]
public string Cross_International_Borders { get; set; }
[DataMember]
public string Use_Kilometers { get; set; }
[DataMember]
public string Hazard_Level { get; set; }
[DataMember]
public string OK_To_Change_Destination { get; set; }
}
public class PCMiler_Connect : IPCMiler_Connect
{
public List<string> PCMiler_Connect_Imple(ZIP_List_Container container)
{
return container.ZIP_List.ToList<string>();
}
}
}
XML Config File
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="PCMiler_Service.PCMiler_ConnectBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="jsonBehavior" >
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="PCMiler_Service.PCMiler_ConnectBehavior"
name="PCMiler_Service.PCMiler_Connect">
<endpoint address="" behaviorConfiguration="jsonBehavior" binding="webHttpBinding"
contract="PCMiler_Service.IPCMiler_Connect" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:7600/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Сервисный упаковщик
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.ServiceModel;
using System.Text;
using System.Threading;
namespace PCMiler_Service
{
public partial class PCMiler_Service : ServiceBase
{
ServiceHost host;
Thread thread;
public PCMiler_Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
host = new ServiceHost(typeof(PCMiler_Connect));
host.Open();
}
protected override void OnStop()
{
if (host != null)
{
host.Close();
host = null;
}
}
}
}
Пример JSON POST с HTTP
POST /PCMiler_Connect_Imple HTTP/1.1
HOST: localhost:7600
Content-Type: application/json
Content-Length: 84
{
"container": {
"ZIP_List":["29340","29614"]
}
}