http://visualstudiogallery.msdn.microsoft.com/fbc7e5c1-a0d2-41bd-9d7b-e54c845394cdを使用して Web サービスを作成しました。IIS でホストし、IIS にデプロイされて動作するテスト アプリを作成しました。ここで、この WCF サービスをホストし、localhost から使用/消費しようとしましたが、次の行でエラーが発生します。
var response = request.GetResponse() as HttpWebResponse;
エラーは
The remote server returned an error: (504) Gateway Timeout.
フィドラーでは次のように表示されます:
Fiddler] ReadResponse() が失敗しました: サーバーはこの要求に対する応答を返しませんでした。
request header in fiddler is:
POST /Notifications/RecordingCompleted HTTP/1.1
Entity:
Content-Length: 792
Content-Type: application/json
Transport
Connection: Keep-Alive
Expect: 100-continue
コードは次のとおりです。
string serviceBaseUrl = serviceurlhere string conversationId = 2342423 string resourceUrl = ""; 文字列メソッド = "POST"; string jsonText = "ここに JSON";
string success = UseHttpWebApproach(serviceBaseUrl, resourceUrl, method, jsonText);
private string UseHttpWebApproach(string serviceUrl, string resourceUrl, string method, string requestBody)
{
string responseMessage = null;
var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
if (request != null)
{
request.ContentType = "application/json";
request.Method = method;
}
//var objContent = HttpContentExtensions.CreateDataContract(requestBody);
if (method == "POST" && requestBody != null)
{
byte[] requestBodyBytes = ToByteArrayUsingJsonContractSer(requestBody);
request.ContentLength = requestBodyBytes.Length;
using (Stream postStream = request.GetRequestStream())
postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);
}
if (request != null)
{
var response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
if (responseStream != null)
{
var reader = new StreamReader(responseStream);
responseMessage = reader.ReadToEnd();
}
}
else
{
responseMessage = response.StatusDescription;
}
}
return responseMessage;
}
private static byte[] ToByteArrayUsingJsonContractSer(string requestBody)
{
byte[] bytes = null;
var serializer1 = new DataContractJsonSerializer(typeof(string));
var ms1 = new MemoryStream();
serializer1.WriteObject(ms1, requestBody);
ms1.Position = 0;
var reader = new StreamReader(ms1);
bytes = ms1.ToArray();
return bytes;
}
サービスコードは次のとおりです。
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class RecordingCompleted
{
[WebInvoke(UriTemplate = "", Method = "POST")]
public string ProcessCall(string JsonData)
{
return string result
}
}