自己ホスト型の WCF RESTful(Json) サーバーを構築しようとしています。ステップバイステップのチュートリアルに従ってくださいhttp://192.168.1.250:18688/MyService/GetJSON
。フィドラーでのリクエスト後にエラー400が返されます。この場合、SVC ファイルの変更が必要だという人もいますが、実際にはセルフホステッド アプリにはそのようなファイルはありません。
修正方法は?ありがとうございました!
インターフェース
namespace Contracts
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "Ping")]
bool Ping();
[OperationContract]
Dude GetDude();
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetJSON")]//,BodyStyle=WebMessageBodyStyle.Bare)]
string GetDudeJSON();
}
}
コード
namespace Contracts
{
[ServiceBehavior]
public class MyService:IMyService
{
public Dude Dummy { get; set; }
public MyService()
{
Dummy = new Dude("Dude", 28);
}
public bool Ping()
{
return true;
}
public Dude GetDude()
{
return Dummy;
}
string IMyService.GetDudeJSON()
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Dude));
ser.WriteObject(stream,Dummy);
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
// Console.WriteLine("Read:"+reader.ReadToEnd());
return reader.ReadToEnd();
}
}
}
APP.config
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="Contracts.MyService" behaviorConfiguration="MEXBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="httpBinding1" contract="Contracts.IMyService"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://192.168.1.250:18688/MyService"/>
</baseAddresses>
</host>
</service>
</services>
<!-- A behavior definition for MEX -->
<behaviors>
<serviceBehaviors>
<behavior name="MEXBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="httpBinding1"></binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
CLI ホスト
static void Main(string[] args)
{
ServiceHost _host = new ServiceHost(typeof(Contracts.MyService));
_host.Open();
ChannelFactory<Contracts.IMyService> channel = new ChannelFactory<Contracts.IMyService>(
new BasicHttpBinding(),
new EndpointAddress("http://192.168.1.250:18688/MyService"));
Contracts.IMyService client = channel.CreateChannel();
while (true)
{
;
}
}