일부 JSON WCF 서비스가 포함 된 ASP.NET 웹이있는 Azure 웹 앱을 만들었습니다. 나는 정말로 WCF 서비스 모델에 대해 충분히 알지 못한다. 나는 올바르게하고있다.이 모양이 옳은가? 확장 성, 최대 동시 연결 수 등을 위해 더 나은 다른 서비스 모델 구성이 있습니까?aspNetCompatibilityEnabled = "true"
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
</system.serviceModel>
<system.net>
<settings>
<!-- See http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/d84ba34b-b0e0-4961-a167-bbe7618beb83 -->
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
이 작동하지만 가끔 예기치 않은 연결을 얻을 나를 걱정 내 개발 환경에서 어떤 HTTP 오류 코드와 함께 (시간 초과) 떨어진다.
업데이트 나는 그것이 아약스의 원인이되는 비주얼 스튜디오의 웹 서버가 될 수 있음을 의심하고있어
<system.net>
<connectionManagement>
<!-- See http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/d84ba34b-b0e0-4961-a167-bbe7618beb83 -->
<add address="*" maxconnection="48" />
</connectionManagement>
</system.net>
의 Web.config
2011년 11월 (24) @하는 것은 시간 제한을 얻기 위해 호출 , 몇 분 후에 서비스가 요청을 다시 받아들입니다. 여기 내 완벽한 설정입니다, 당신은 문제가 무엇인지 알 수 있습니까? 서비스에 대한 Ajax 호출이 하나뿐입니다.
Inferface
IExample.cs :
using System.ServiceModel;
using System.ServiceModel.Web;
namespace WebPages.Interfaces
{
[ServiceContract]
public interface IExample
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json)]
string GetSomething(string id);
}
}
ExampleService.svc.cs는
<%@ ServiceHost Language="C#" Debug="true" Service="WebPages.Interfaces.ExampleService" CodeBehind="ExampleService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
ExampleService.svc.cs이
을 숨김 마크 업 클라이언트에서 691,363,210namespace WebPages.Interfaces
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExampleService : IExample
{
string JsonSerializeSomething(Something something)
{
var serializer = new DataContractJsonSerializer(something.GetType());
var memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, something);
return Encoding.Default.GetString(memoryStream.ToArray());
}
public string GetSomething(string id)
{
var something = DoSomeBusinessLogic(id);
return JsonSerializeSomething(something);
}
}
}
jQuery를 호출
function _callServiceInterface(id, delegate) {
var restApiCall = "Interfaces/ExampleService.svc/GetSomething?id="
+ escape(id);
$.getJSON(restApiCall, delegate);
}
function _getSomethingFromService() {
_callServiceInterface('123',
function (result) {
var parsedResult = $.parseJSON(result);
$('#info').html(result.SomethingReturnedFromServiceCall);
}
);
}
업데이트
나는이 문제가 지금 무엇인지 생각; WCF 서비스는 기본적으로 단일 threaed 인 것으로 보입니다 (출처 : http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.SERVICEMODEL.SERVICEBEHAVIORATTRIBUTE.CONCURRENCYMODE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true). 그게 내 Ajax 호출이 다른 스레드에 의해 차단 된 시간 제한을받는 이유를 설명합니다.
<%@ ServiceHost Language="C#" Debug="true" Service="WebPages.Interfaces.TagService" CodeBehind="TagService.svc.cs" %>
,691,363
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession,
IncludeExceptionDetailInFaults = false, MaxItemsInObjectGraph = Int32.MaxValue)]
//[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExampleService : IExample
의 Web.config
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="webHttpBinding" bindingConfiguration="" />
</protocolMapping>
<behaviors>
<endpointBehaviors>
<behavior name="">
<webHttp defaultOutgoingResponseFormat="Json" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
ExampleService.svc을
ExampleService.svc.cs :이 코드는 훨씬 더 작업을해야210
업데이트 @ 9.10.2011
나는 내가 여기 Locking with ConcurrencyMode.Multiple and InstanceContextMode.PerCall
aspNetCompatibilityEnabled="false"
필요한 답을 찾은 것 같아 내 WCF 코드에서 HttpContext
, ASP.NET 세션 등을 액세스 할 수 없다는 것을 의미한다.
Azure 환경에서 서비스가 작동합니까? 그렇지 않으면 꽤 개방 된 질문입니다. 당신이 원하는 것을 많이 제공하지 않았습니다. –
@ david-hoerster 질문에 더 많은 코드를 추가했습니다. –