내용 유형 'application/json; charset=utf-8'이(가) 필요한 유형 'text/xml; charset=utf-8'이 아니므로 메시지를 처리할 수 없습니다.
저는 ajax json을 통해 WCF 서비스를 호출할 때 위의 답변을 받습니다.내 전화번호는:
<script type="text/javascript">
$(document).ready(function () {
$.ajax
({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://localhost:90/WebServices/UserService.svc/Calculate",
data: "{}",
timeout: 10000,
dataType: "json",
success: function (response) {
alert(response)
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.statusText);
alert(thrownError);
}
});
});
</script>
서비스는 다음과 같습니다.
[ServiceContract]
public interface IUserService
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json
)]
Answer Calculate();
}
[DataContract]
public class Answer
{
[DataMember]
public string answer { get; set; }
}
내 방법은 다음과 같습니다.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class UserService : IUserService
{
public Answer Calculate()
{
Answer answer = new Answer();
answer.answer="Hello World";
return answer;
}
}
저는 한동안 싸우고 있었는데, 다른 사람들도 같은 유형의 문제를 가지고 있었고, 거기서 모든 제안을 시도했지만 여전히 아무 것도 효과가 없습니다.
어디가 문제입니까?어떻게 해결해야 합니까?
엔드포인트를 정의한 방법을 보여주지 않으셨기 때문에 여기서 추측하고 있습니다만, 저는 그게 사실이라고 확신합니다.사용자의 엔드포인트가 웹 사용에 대해 정의된 것이 아닙니다. 사용할 가능성이 높습니다.basicHttpBinding
. jQuery(또는 일반적으로 다른 웹/REST 클라이언트)를 통해 엔드포인트를 소비하려면 를 사용하여 엔드포인트를 정의해야 합니다.WebHttpBinding
, 적용합니다.WebHttpBehavior
하게.
엔드포인트를 올바르게 정의하는 방법에는 여러 가지가 있습니다.가장 쉬운 것은 사용하는 것입니다.WebServiceHostFactory
.svc 파일에서:
사용자 서비스.svc:
<%@ ServiceHost Language="C#" Debug="true" Service="YourNamespace.UserService"
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
'content type 'application/json; charset=utf-8'이(가) 필요한 text/xml; charset=utf-8' 유형이 아닙니다.
저의 경우에도 속성을 제대로 갖추지 않은 상태에서 서비스를 구축하고 운영하면서 비슷한 오류가 발생했습니다.클라이언트 애플리케이션에서 서비스 참조를 업데이트하려고 할 때 이 오류 메시지가 표시되었습니다.사용자 지정 클래스에 '[DataContract]' 및 '[DataMember]' 속성을 올바르게 적용했을 때 해결되었습니다.
편집: 서비스를 설정하고 작동하다가 편집한 후에 서비스가 중단된 경우에 이 기능이 적용될 가능성이 높습니다.
꽤 오래된 질문이지만 @carlosfigueira 답변에 대한 정보를 추가하고 싶습니다.
1. 지정하기Factory
인에.svc
vs. 지정하기<service>
인에web.config
a를 지정하는 대안.Factory
에서.svc
파일은 a를 지정하고 있습니다.<service>
에서web.config
file. 이는 다른 많은 답변(예: 이 답변)에서 설명되므로 반복하지는 않겠지만, 여기에 또 다른 @carlosfigueira 답변을 복사할 가치가 있습니다.
.svc 파일에 팩토리를 지정하지 않으면 모든 엔드포인트가 web.config 파일에서 나옵니다. WCF는 다음을 찾으려 합니다.
<system.serviceModel / service>
누구의 원소name
attribute가 서비스 클래스의 정규화된 이름과 일치합니다.찾을 수 없으면 기본 끝점을 추가합니다(사용).basicHttpBinding
, 기본 매핑을 변경하지 않는 한).
분명히 말씀드리지만, 정규화된 이름에는 네임스페이스가 포함되어야 합니다.그래서 만약 다음과 같은 것이 있다면,MyWebServices.ExampleWebService
:
namespace MyWebServices
{
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class ExampleWebService
{
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
public string DoWork(DoWorkRequest request)
{
return "success!";
}
}
}
2. 메시지를 처리할 수 없습니다.." localhost에서 호출된 경우
Visual Studio의 localhost에서 ajax call을 실행하려고 할 때 이 질문을 받았는데, 이 질문의 제목인 오류 메시지가 표시되어 이를 해결하기 위한 필요한 단계를 나열하고자 합니다.
- 위에서 설명한 바와 같이, 다음 중 하나를 추가합니다.
Factory
.svc
, 또는 필요한 것을 지정합니다.web.config
. - Visual Studio에서 마우스 오른쪽 버튼을 클릭합니다.
.html
파일을 작성한 후 "View in Browser"(브라우저에서 보기)"를 선택합니다.기본 브라우저가 열리고 Chrome일 경우 URL은 다음과 같습니다.localhost:51667/test.html
(실제로는http://localhost:51667/test.html
). - 이제 ajax 호출을 실행할 수 있으며 웹 서비스 응답을 성공적으로 얻을 수 있기를 바랍니다.
- 웹 서비스를 디버깅하려면 다음을 수행합니다.
Visual Studio에서 웹 서비스의 프로젝트가 Startup Project(스타트업 프로젝트)로 설정되어 있는지 확인하고 F5를 누릅니다.WCF Test Client 창이 시작되지만 무시하고 ajax 요청을 실행할 수 있습니다.
저의 경우는 요청 방법이 문제였습니다.POST 요청 대신 GET 요청을 보내려고 했습니다.
언급URL : https://stackoverflow.com/questions/14403492/cannot-process-the-message-because-the-content-type-application-json-charset-u
'programing' 카테고리의 다른 글
동적으로 설정 iframe src (0) | 2023.10.26 |
---|---|
리피터 내부의 트랙터 요소 찾기 (0) | 2023.10.26 |
lodash에서 포함 방법을 사용하여 객체가 컬렉션에 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.10.21 |
swift(iOS)에서 라디오 버튼과 체크박스를 만드는 방법? (0) | 2023.10.21 |
해결책을 검색한 후 워드프레스에서 All-in-One 마이그레이션을 읽을 수 있는 파일 (0) | 2023.10.21 |