JavaScript 웹 사이트 (JavaScript 파일, 이미지 등)도 제공하는자가 호스팅 웹 서비스 (WebServiceHost)가 있습니다.이 서비스는 .net 4.0 (vs2010)에서 제대로 실행됩니다.WCF HTTP 서비스 : vs2012 설치 응용 프로그램이 깨졌습니다.
이제 vs2012를 설치했고 내 앱이 손상된 것으로 보입니다. (여전히 vs2010을 사용하고 있습니다. 아마도 .net 4.5 설치가 원인 일 수 있습니다). 그것은 잘 컴파일하고 런타임 오류가 있지만 html과 자바 스크립트가 어떤 상황에서는 깨진 것 같습니다. 여기에 (내 생각) 관련 codefragments은 다음과 같습니다
사용 인터페이스 (System.Data.Services)는 : 메시지의
public interface IRequestHandler
{
Message ProcessRequestForMessage(Stream messageBody);
}
창조 :
string filePath = _physicalPath + string.Join("\\", incomingRequest.UriTemplateMatch.RelativePathSegments.ToArray());
HttpResponseMessageProperty responseProperty = new HttpResponseMessageProperty();
if (File.Exists(filePath) && SetContentType(responseProperty.Headers, Path.GetExtension(filePath).ToLower()))
{
Message message = Message.CreateMessage(MessageVersion.None, "", HttpServiceBodyWriter.Create(filePath));
message.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Raw));
message.Properties.Add(HttpResponseMessageProperty.Name, responseProperty);
}
HttpServiceBodyWriter :
class HttpServiceBodyWriter : StreamBodyWriter
{
private System.IO.Stream _source = null;
private HttpServiceBodyWriter(System.IO.Stream source) : base(false)
{
_source = source;
}
protected override void OnWriteBodyContents(System.IO.Stream stream)
{
_source.CopyTo(stream);
}
internal static HttpServiceBodyWriter Create(System.Net.WebResponse response)
{
return new HttpServiceBodyWriter(response.GetResponseStream());
}
internal static HttpServiceBodyWriter Create(string filePath)
{
return new HttpServiceBodyWriter(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
}
}
Somtimes 올바른 페이지가 제공됩니다
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<>
.....
:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8" />
....
나는 HTML 페이지를 요청하면 16,
이 때로는 손상된 페이지 ("머리"후 이중 DTD 정의와 빈 태그 참조) 제공
초기 페이지 요청이 항상 올바른 페이지를 전달하는 것처럼 보입니다. 순차적 인 요청이 손상됩니다.
누구에게이 이상한 행동에 대한 설명이 있습니까? 어떤 도움을 주셔서 감사합니다 (이 문제는 나에게 C++ 시대를 떠올리게합니다). 나는 당신이이 문제를 재현 할 수있는 작은 프로젝트를 만든
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true" maxMessagesToLog="300000" maxSizeOfMessageToLog="200000" />
</diagnostics>
<services>
<service name="WcfTest.HttpService" behaviorConfiguration="DataServiceBehavior">
<endpoint name="DataService" binding="webHttpBinding" bindingConfiguration="DataService" contract="System.Data.Services.IRequestHandler" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/TestSite/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors />
<serviceBehaviors>
<behavior name="DataServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False" />
<dataContractSerializer maxItemsInObjectGraph="1000000" />
<serviceMetadata httpGetEnabled="true" />
<serviceThrottling maxConcurrentCalls="200" maxConcurrentInstances="2147483647" maxConcurrentSessions="200" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="DataService" maxReceivedMessageSize="5000000" maxBufferPoolSize="5000000" maxBufferSize="5000000" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
<readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" maxBytesPerRead="5000000" />
<security mode="None"/>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
업데이트 :
이것은의 app.config의 ServiceModel은 서비스 섹션이다. 여기에서 다운로드 할 수 있습니다 : https://skydrive.live.com/redir?resid=CBC3C885DE2032B8!131&authkey=!ALZOaSL0V0s-itM
손상된 html이 나타날 때까지 브라우저의 새로 고침 버튼을 여러 번 누르기 만하면됩니다.
이미 시도한 적이 없다면 서비스 호스트를 다시 컴파일하고 재배포하여 프레임 워크의 v4.0을 가리키고 있는지 확인하십시오. –
감사합니다. Gabe, 이미 시도했습니다. – Jeldrik