14 julho 2005
BUG do Visual Studio 8 Beta 2
currente == null é falso mas b é verdadeiro
currente == null é falso mas b é verdadeiro
30 junho 2005
Os espanhois é que sabem ... via wikipedia
Los programas de mensajería instantánea son utilizados para «chatear» ....
Los programas de mensajería instantánea son utilizados para «chatear» ....
22 junho 2005
Remoting exceptions
Quando ocurria uma excepção num serviço a excepção recebida na aplicação era a seguinte:
"Server encountered an internal error. For more information, turn on customErrors in the server's .config file."
Problema:
O servidor não estava configurado para enviar as excepções para pedidos feitos noutras máquinas.
Pode-se verificar esta situação com:
// retona true se o filtro estiver activo, ou seja as excepções não são enviadas.
RemotingConfiguration.CustomErrorsEnabled(false);
Solução:
É necessário colocar o seguinte no ficheiro de configuração do servidor:
<configuration>
<system.runtime.remoting>
<customErrors mode="off"/>
</system.runtime.remoting>
</configuration>
É tambem necessário colocar no servidor o seguinte codigo:
RemotingConfiguration.Configure("Server.exe.config");
nota: Na versão 2.0 do .NET já é configurável programaticamente.
É ainda obigatório que a excepção esteja marcada como [Serializable] e que defina o construtor para deseriação
[Serializable]
public class MyException: Exception {
...
public MyException(SerializationInfo info, StreamingContext
context) : base(info, context) { }
}
Referência:
http://www.codeproject.com/csharp/PathRemotingArticle.asp?select=878980&df=100&amp;amp;amp;amp;forumid=36788&exp=0&tid=878980#xx878980xx
Quando ocurria uma excepção num serviço a excepção recebida na aplicação era a seguinte:
"Server encountered an internal error. For more information, turn on customErrors in the server's .config file."
Problema:
O servidor não estava configurado para enviar as excepções para pedidos feitos noutras máquinas.
Pode-se verificar esta situação com:
// retona true se o filtro estiver activo, ou seja as excepções não são enviadas.
RemotingConfiguration.CustomErrorsEnabled(false);
Solução:
É necessário colocar o seguinte no ficheiro de configuração do servidor:
<configuration>
<system.runtime.remoting>
<customErrors mode="off"/>
</system.runtime.remoting>
</configuration>
É tambem necessário colocar no servidor o seguinte codigo:
RemotingConfiguration.Configure("Server.exe.config");
nota: Na versão 2.0 do .NET já é configurável programaticamente.
É ainda obigatório que a excepção esteja marcada como [Serializable] e que defina o construtor para deseriação
[Serializable]
public class MyException: Exception {
...
public MyException(SerializationInfo info, StreamingContext
context) : base(info, context) { }
}
Referência:
http://www.codeproject.com/csharp/PathRemotingArticle.asp?select=878980&df=100&amp;amp;amp;amp;forumid=36788&exp=0&tid=878980#xx878980xx
08 junho 2005
Convenções:
- Nome da base de dados: Namespace dos objectos.
- Nome das tabelas: "PISCO_ " + nome do objecto.
- Nome dos campos: Nome das propriedades, não podem ser palavras reservadas.
- Tipo do serviço: XPTO + "Service".
- Tipo da interface: "I" + XPTO + "Service.
- Tipo do objecto remoto: XPTO + "ServiceRemoting".
- Nome remoto do serviço: XPTO + "ServiceRemoting.rem".
12 maio 2005
A seriação do DataObject
Visto não ser possível seriar uma DataRow o DataObject não pode ser seriado a menos que, a DataRow seja seriada dentro de um DataSet.
Para evitar ter de criar um DataSet com uma DataTable com uma DataRow, tivemos de alterar o DataObject.
Uma hipotese passa por criar objectos wrapper que contenha a informação do objecto, mas obrigava a criar, para cada objecto, o objecto wrapper.
A solução passou por alterar o DataObject por forma a não seriar a DataRow mas sim apenas o seu conteúdo, no destino é criado um outro objecto denominado PiscoDataConteiner que artmazena esses valores numa HashTable permitindo o acesso aos mesmos
Visto não ser possível seriar uma DataRow o DataObject não pode ser seriado a menos que, a DataRow seja seriada dentro de um DataSet.
Para evitar ter de criar um DataSet com uma DataTable com uma DataRow, tivemos de alterar o DataObject.
Uma hipotese passa por criar objectos wrapper que contenha a informação do objecto, mas obrigava a criar, para cada objecto, o objecto wrapper.
A solução passou por alterar o DataObject por forma a não seriar a DataRow mas sim apenas o seu conteúdo, no destino é criado um outro objecto denominado PiscoDataConteiner que artmazena esses valores numa HashTable permitindo o acesso aos mesmos
05 maio 2005
O drama, o horror, a vida real
James,
I think this may be a bug and I hope somebody from Microsoft can eitherconfirm or deny this for me.
I'm trying to Clone (deep copy) a class that wraps a DataRow, but uponserializing the DataRow, I get the following exception:System.Runtime.Serialization.SerializationException
Additional information: The typeSystem.Xml.XmlBoundElement in AssemblySystem.Data, Version=1.0.3300.0, Culture=neutral,PublicKeyToken=b77a5c561934e089 is not marked as serializable.
Anwer:
This is (what every developer dreads to hear) "by design".
The DataRow hasno default constructor and no custom serializable method - either of whichwould be required for what you want. In order for a DataRow to beserialized, it must belong to a DataTable in a DataSet - the DataSet iscurrently the smallest unit of data that can be serialized.
We are aware of this limitation and it is due to change in future versions of the product.
Malcolm StewartMicrosoft Developer SupportThis posting is provided "AS IS", with no warranties, and confers no rights.
James,
I think this may be a bug and I hope somebody from Microsoft can eitherconfirm or deny this for me.
I'm trying to Clone (deep copy) a class that wraps a DataRow, but uponserializing the DataRow, I get the following exception:System.Runtime.Serialization.SerializationException
Additional information: The typeSystem.Xml.XmlBoundElement in AssemblySystem.Data, Version=1.0.3300.0, Culture=neutral,PublicKeyToken=b77a5c561934e089 is not marked as serializable.
Anwer:
This is (what every developer dreads to hear) "by design".
The DataRow hasno default constructor and no custom serializable method - either of whichwould be required for what you want. In order for a DataRow to beserialized, it must belong to a DataTable in a DataSet - the DataSet iscurrently the smallest unit of data that can be serialized.
We are aware of this limitation and it is due to change in future versions of the product.
Malcolm StewartMicrosoft Developer SupportThis posting is provided "AS IS", with no warranties, and confers no rights.
DataModelAdapter para suportar diversos serviços
Problema:
Pelo facto de existir a tabela DataObject em cada um dos serviços não é possivel carregar os vários schemas no mesmo DataSet do DataModelAdapter
Soluções:
- Fazer mapeamento das várias taqbelas DataObject para nomes únicos, por exemplo baseado no namespace do serviço. Gestão complicada dessas tabelas e do mapeamento de nomes.
- Ter um DataSet por cada serviço que se registe no DataModelAdapter. Permite uma gestão ao serviço e evita conflitos de nome.
ServiceDataManager
Serviço que realiza a gestão de dados de um serviço. É composto por um DataSet que armazena os dados locais desse serviço.
O DataModelAdapter instancia um SDM por cada serviço registado.
Cada serviço é identificado pelo namespace dos seus DataObjects. Cada namespace é considerado um serviço diferente.
Problema:
Pelo facto de existir a tabela DataObject em cada um dos serviços não é possivel carregar os vários schemas no mesmo DataSet do DataModelAdapter
Soluções:
- Fazer mapeamento das várias taqbelas DataObject para nomes únicos, por exemplo baseado no namespace do serviço. Gestão complicada dessas tabelas e do mapeamento de nomes.
- Ter um DataSet por cada serviço que se registe no DataModelAdapter. Permite uma gestão ao serviço e evita conflitos de nome.
ServiceDataManager
Serviço que realiza a gestão de dados de um serviço. É composto por um DataSet que armazena os dados locais desse serviço.
O DataModelAdapter instancia um SDM por cada serviço registado.
Cada serviço é identificado pelo namespace dos seus DataObjects. Cada namespace é considerado um serviço diferente.
24 fevereiro 2005
Novo Modelo do Novo Modelo
Para evitar a utilização do DMA como factory, decidimos alterar o modelo, com a alteração da derivação para composição
.:Modelo 2
O aparecimento de um Parent na PiscoDataRow deve-se ao facto de decidirmos alterar tambem o modo como os objectos são armazenados em base de dados para permitir utilizar relações directamente no SGBD evitando o processamento para manter a coerência entre os dados.
Desta forma o novo modelo relacional é um espelho do modelo hierárquico
Para evitar a utilização do DMA como factory, decidimos alterar o modelo, com a alteração da derivação para composição
.:Modelo 2
O aparecimento de um Parent na PiscoDataRow deve-se ao facto de decidirmos alterar tambem o modo como os objectos são armazenados em base de dados para permitir utilizar relações directamente no SGBD evitando o processamento para manter a coerência entre os dados.
Desta forma o novo modelo relacional é um espelho do modelo hierárquico