웹 서비스를 통해 연결된 Flex 프론트 엔드와 C# 백엔드를 사용하여 응용 프로그램을 개발하고 있습니다. 우리는 FLex Builder 3의 웹 서비스 관리자를 사용하여 웹 서비스 클래스를 자동 생성합니다. Flex가 객체를 직렬화 할 때 문제가 발생합니다. 예를 들어 값이없는 Number 속성이 있고이 객체가 NaN으로 직렬화되고 백엔드가 NaN을 모르는 경우입니다. 또 다른 예는 순환 참조를 직렬화 할 때 스택 오버 플로우 예외가 발생하는 경우입니다. 자바에서 예를 들어 순환 참조로 xstream이 작동하는 방식을 구성 할 수 있습니다 ... 그렇다면 문제는 C#이 프론트 엔드에서 작동하도록 객체를 직렬화하는 방식을 변경할 수 있습니까? flex가 객체를 직렬화하는 방법에 대해 알아야 할 문제가 있습니까? 감사합니다. 호르헤C# 백엔드에서 flex에있는 객체를 직렬화하는 방법
답변
Flex Bluider의 웹 서비스 관리자를 사용하면 작성한 모든 웹 서비스에 대해 프록시 ActionScript 클래스가 자동으로 생성됩니다. 직렬화 프로세스는 웹 서비스 중 하나를 실행할 때 이러한 클래스를 사용합니다. 이러한 클래스의 속성을 편집하여 C# 측에서 항상 처리 할 수 있습니다 (이 방법을 사용하면 NaN 값을 제거 할 수 있습니다).
내가보기에 또 다른 옵션은 객체를 XML과주고받는 사용자 정의 코드를 작성하는 것입니다. This Adobe article으로 시작할 수 있습니다. 난 그냥 볼 나는이를 사용한 적이 있지만, 당신은 아마 (찾고 무엇
:
나는 자동 생성 된 클래스의 직렬화를 변경하지만 다음과 같은 몇 가지 도움을 제공하려고합니다 방법을 잘 모르겠습니다 내가했던
것들 :
-
그것은 모든 시간을) 언급
- 안부에서 액션 스크립트 플러그인
에 사용 Protocol Buffers 문제로 직면 : as3corelib
내가 한 번도 안 써봤 또 다른 아이디어를 쉽게 수행 할 수 있습니다
- 나는 수많은 issu 객체를 Java로 직렬화하기 때문에 철저히 테스트하십시오.
- 직렬 생성 문제가있는 .Net과 함께 자동 생성 웹 서비스를 사용해 보았습니다. SDK를 업데이트 할 때 자동 생성이 상당히 바뀌는 것 같지만 서비스가 전혀 없으며 근본 원인을 찾지 못했습니다.
조금 다른 디자인을 고려해야한다고 생각합니다. 비슷한 문제가 있었지만 다음 해결책을 개발했습니다.
만 원시 인수
웹 서비스 메소드의 인수 (문자열, INT) 등 만 기본 유형을 정의합니다 ..
당신은 클래스가 예를 들어,
class Person{
long PersonID;
long MembershipID;
string Name;
}
그리고 당신은 백엔드에 "이름"속성을 변경하려면, 진실은 쉽게 당신은, 당신이 그 프론트 엔드를 처리해야합니다 귀하의 프론트 엔드를 신뢰하지 않아야 할 수있다 이 경우 MembershipID처럼 프론트 엔드가 수정할 수없는 필드 인 것처럼 잘못된 데이터를 보낼 수 있습니다.
사람이 올바르게 저장하는 코드를 작성할 수 있지만 누군가가 쉽게 WSDL을 읽고 코드를 손상시킬 수 있습니다.
이렇게 대신.
[WebMethod]
public void SavePerson(Person p){
p.Save(); <-- this is dangerous
}
우리는 그러나 또한 전문 래퍼 클래스를 사용하여 방지 할 수 있습니다 왕복,
[WebMethod]
public void SavePersonName(long personID, string name){
Person p = GetPersonByID(personID);
p.Name = name;
p.Save();
}
내가 많은이 더 서버에 더 왕복뿐만 아니라 코딩이 발생할 것이라고 주장 알고 사용합니다. 인수
// I will only define the fields I want to pass to server
// this needs to be done at backend level
class PersonAddressWrapper{
long PersonAddressID;
string AddressLine1;
string AddressLine2;
string ZipCode;
string City;
string Country;
}
class PersonWrapper{
long PersonID;
string Name;
PersonAddressWrapper[] Addresses;
}
[WebMethod]
public void SavePerson(PersonWrapper pw){
Person p = GetPersonByID(pw.PersonID);
p.Name = pw.Name;
p.Save();
foreach(PersonAddressWrapper paw in pw.Addresses){
PersonAddress pa = GetPersonAddressByID(paw.PersonAddressID);
Copy(pa,paw);
pa.Save();
}
}
당신이, 당신은 또한 포함하는 래퍼 클래스를 구성 할 수 있습니다 라운드 트립을 줄일 수 있습니다이 방법에 래퍼 클래스의
이사용/너무 당신의 순환 의존성과 그 안전을 제거 할 수있는 항목을 제외 할 수 있습니다.
예 더 많은 작업이 필요하다는 것을 알고 있지만 이것은 안전한 방법입니다.
귀하의 문제에 대한 결정을 내렸을 수 있습니다.
FlexBuilder3에서 자동 생성 클래스를 사용하는 경우 보내는 비누 메시지를 잡아서 수정할 수 있습니다. "Base [ServiceName]"클래스의 "call()"함수에서 쉽게 수행 할 수 있습니다.
당신이해야 할 일을 모두 내가 (아래 참조) cleanXML 기능을 한 내 경우 문자열
message.body = soap.toString();
전에 "비누"변수를 수정하는 것입니다. 이 기능은 속성 XSI가에 "NaN의"동일 또는 모든 XML 요소 삭제 : 무기 호 = '진정한'
private function cleanXML(xml:XML, qn:QName):void{
if (XMLList(xml).hasSimpleContent()){
if ((xml.valueOf() == "NaN") || (xml.attribute(qn) == true)){
delete xml.parent().children()[xml.childIndex()];
}
}else{
for each (var item:XML in xml.children()){
cleanXML(item, qn);
}
}
}
그래서() 함수 호출의 언급 부분은 다음과 같습니다
var soapList:XML;
soapList = soap as XML;
var qn:QName = new QName(soapList.namespace("xsi"), "nil");
cleanXML(soapList, qn);
message.body = soapList.toString();
나는이 결정이 좋지 않다는 것을 안다. 내 상황에서는 완벽하게 작동한다.
- 1. 자바에서 JSON 객체를 직렬화하는 방법
- 2. C# Castle ActiveRecord : 우아하게 (XML) ActiveRecord 객체를 직렬화하는 방법?
- 3. 일반 JavaScript 객체를 XML로 직렬화하는 방법
- 4. Clojure에서이 Java 객체를 직렬화하는 올바른 방법은 무엇입니까?
- 5. 최고의 C#에서 개체의 목록을 직렬화하는 방법
- 6. 코드 중복없이 appserver에서 웹 서버로 객체를 직렬화하는 방법
- 7. NSData가 포함 된 객체를 직렬화하는 방법은 무엇입니까?
- 8. Object 유형의 객체를 직렬화하는 방법은 무엇입니까?
- 9. .Net MailMessage 객체를 직렬화하는 방법이 있습니까
- 10. flex에있는 데이터 격자의 버튼
- 11. XML 속성을 역 직렬화하는 방법
- 12. 다른 형식을 포함하는 배열을 직렬화하는 Objective-c 방법
- 13. MonoTouch에서 System.Json을 사용하여 직렬화하는 방법
- 14. XML에 ArrayList를 직렬화하는 방법
- 15. 안정적으로 데이터를 직렬화하는 방법
- 16. Qt에서 JSON에 직렬화하는 방법
- 17. fusion :: vector를 직렬화하는 방법?
- 18. WPF 그리기를 직렬화하는 방법?
- 19. C에서 데이터를 직렬화하는 방법
- 20. Ada가 레코드를 직렬화하는 방법 이해하기
- 21. flex에있는 이미지에 동적으로 텍스트 추가
- 22. bison/flex에있는 간단한 XML 파서
- 23. XML에서 C#으로 여러 데이터 형식 목록을 직렬화하는 방법?
- 24. IPhone SDK - ABRecord를 직렬화하는 방법?
- 25. ActiveRecord의 해시 배열을 직렬화하는 방법?
- 26. Silverlight에서 파생 클래스를 직렬화하는 방법
- 27. System.Net.Mime.ContentType 형식의 개체를 직렬화하는 방법?
- 28. PHP 개체의 배열을 직렬화하는 방법?
- 29. 부스트를 사용하여 CString을 직렬화하는 방법
- 30. VB6에서 treeview 노드를 직렬화하는 방법?