Wednesday, November 2, 2011

XmlSerializer example

Просто как шпаргалка, Xml сериализация, если память отобьет:

// This is the test class we want to
// serialize:[Serializable()]public class TestClass
{ private string someString;
public string SomeString
{ get { return someString; } set { someString = value; } }
private List<string> settings = new List<string>();
public List<string> Settings
{ get { return settings; } set { settings = value; } }
// These will be ignored [NonSerialized()] private int willBeIgnored1 = 1;
private int willBeIgnored2 = 1;

}
// Example code
// This example requires:// using System.Xml.Serialization;// using System.IO;
// Create a new instance of the test classTestClass TestObj = new TestClass();

// Set some dummy valuesTestObj.SomeString = "foo";

TestObj.Settings.Add("A");
TestObj.Settings.Add("B");
TestObj.Settings.Add("C");


#region Save the object
// Create a new XmlSerializer instance with the type of the test classXmlSerializer SerializerObj = new XmlSerializer(typeof(TestClass));

// Create a new file stream to write the serialized object to a fileTextWriter WriteFileStream = new StreamWriter(@"C:\test.xml");
SerializerObj.Serialize(WriteFileStream, TestObj);

// CleanupWriteFileStream.Close();

#endregion

/*The test.xml file will look like this: <?xml version="1.0"?><TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SomeString>foo</SomeString> <Settings> <string>A</string> <string>B</string> <string>C</string> </Settings></TestClass>
*/
#region Load the object
// Create a new file stream for reading the XML fileFileStream ReadFileStream = new FileStream(@"C:\test.xml", FileMode.Open, FileAccess.Read, FileShare.Read);

// Load the object saved above by using the Deserialize functionTestClass LoadedObj = (TestClass)SerializerObj.Deserialize(ReadFileStream);

// CleanupReadFileStream.Close();

#endregion

// Test the new loaded object:MessageBox.Show(LoadedObj.SomeString);

foreach (string Setting in LoadedObj.Settings) MessageBox.Show(Setting);

Friday, September 30, 2011

Проверка пренадлежности точки полигону

Появилась задача, понять, входит ли точка в полигон или нет.
На просторах интернета были найдены 2 прекрасных сайта с алгоритмами
http://delphid.dax.ru/www/exampl35.htm - написано на Pascal но переписать на другой язык не проблема. Однако в данной реализации, похоже, происходит ошибка если луч попадет в вершину полигона.
http://alienryderflex.com/polygon/ - реализация на с++. Похоже что работает правильно, плюс ко всему есть описание разных случаев.

Проверка пренадлежности точки полигону


Thursday, July 7, 2011

Перегруженные методы и веб- сервисы

Задание реализовать перегруженный метод.
Пишем как обычно
[WebMethod]
public void method (int a, int b)
{}
[WebMethod]
public void method(int a)
{}
Запускаем дебаг, и получаем ошибку

Both System.Data.DataTable GetDictionary(System.String) and System.Data.DataTable GetDictionary(System.String, System.String) use the message name 'GetDictionary'.  Use the MessageName property of the WebMethod custom attribute to specify unique message names for the methods.

Причину ошибки можно понять открыв http://<адрес вашего сервиса>/service1.asmx?WSDL.
У сообщений(message) которые посылает сервис одинаковое имя. 
Что бы исправить ошибку нужно добавить атрибуты:
[WebMethod(MessageName = "method2args",Description = "method with 2 args",EnableSession = true)]
public void method (int a, int b)
{}
[WebMethod(MessageName = "method1arg",Description = "method with 1 arg",EnableSession = true)]
public void method(int a)
{}
Если ваш сервис использует .net 2.0 и выше то вы все равно получите ошибку:

Service '<name of service>' does not conform to WS-I Basic Profile v1.1. Please examine each of the normative statement violations below.

 Нужно поправить еще 1 атрибут:
[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.None)]



Метод веб сервиса принемающий параметры с модификатором out