'상태가 좋은 서비스가 좋지 않습니다'토론에 들어 가지 않고 ... 어떻게 작성하나요?asp.net에서 stateful XML WebService를 만드는 방법은 무엇입니까?
도움이되는 검색 결과가 부족합니다. 잘못된 용어를 찾고 있거나 적극적으로 낙담하고있는 것 같습니다. 내가 찾을 수있는 최고의 링크는 this one on MSDN
현재 사용중인 앱의 간단한 컨텍스트를 제공합니다. Rails Web App => ASP.Net Xml webservice => Legacy C#/C++ code
지금까지 그렇게 좋았습니다. 이제는 WebMethod에 대한 첫 번째 요청을 할 때 각 호출에서 생성 - 사용 - 처리 비용이 많이 드는 프로세스/리소스를 실행해야합니다. 그래서 나는이 자원들을 재사용하는 것을 보았습니다.
먼저 구성원 변수로 만들려고했는데 - 각 요청에 MyWebService
클래스의 새 인스턴스가 적용되고 다른 스레드에서 서비스가 제공되는 전구 만 있습니다.
링크는이 작업을 수행 할 수있는 방법은
- 가 상태가 당 사용자 인 경우에 세션 해시/속성 모음을 사용하는 것이 좋습니다.
- 이 권리인가 :
- 는 상태가
질문 전역 경우 응용 프로그램 해시/속성 모음을 사용 하는가? 마법 속성이 부족합니까?
내 웹 서비스 클래스는 다음과 같습니다 ..
[WebService(Namespace = "http://Walkthrough/XmlWebServices/",
Description="A temperature conversion xml web service")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class TemperatureConverter : System.Web.Services.WebService, IDisposable
{
[WebMethod(Description = "This method converts celsius to fahrenheit")]
public double convert_fahrenheit_to_celsius(double temp_in_fahrenheit)
{
/// code
}
}
업데이트 : 난 아직도 Q # 2와 사투를 벌인거야. 은 "사용자 이름"키를 쓰기에 성공
protected void Application_Start(object sender, EventArgs e) // global.asax.cs
{
Application["UserName"] = "Gishu";
}
myWebMethod // MyWebService.cs
{
if (Application["myKey"] == null)
LoadHeavyObjectsAndCacheKeys(); // set Application["myKey"] between Application.Lock() Unlock() calls.
...
}
몇 가지 이상한 행동을있다 - 그것은 해시에 존재한다. 그러나 웹 메서드 내에서 작성한 키 - 값 쌍은 현재 웹 요청에서 살아남지 못합니다. 다음 요청에서 해시 테이블에는 여전히 "UserName"항목 만 있습니다. 이것이 ApplicationState이기 때문에 EnableSession 속성을 true로 설정하지 않아도된다고 가정합니다.
확인해 주셔서 감사합니다. 그러나 응용 프로그램 상태가 계속 유지되는 데 문제가 있습니다. 내 질문에 대한 업데이트를 참조하십시오. 또한 ASP.Net 개발 서버를 실행 중입니다.이 문제가 발생할 수 있습니까? – Gishu
디버그 전략으로 단순화 할 것을 제안합니다. Application_Start에서 웹 메소드로 코드를 복사 한 다음 키를 "Username1"로 변경하십시오.두 번째로 웹 메소드를 호출 할 때 _this_ 셀이 초기화되었는지 확인하십시오. –