Вы звоните Range()
неправильно. Попробуйте это:
LastRow = ws.Cells(1, Rows.Count).End(xlUp).Row
или
LastRow = ws.Range("A" & rows.count).End(xlUp).Row
Первоначально, это было решено в основном ws.Range(1 & 1048576)...
-> ws.Range(11048576).End(xlUp).Row
, что A) не является правильным Range
и B) является несуществующим номером строки.
Также обратите внимание, что это xlUp
, а не x1Up
(это «L», а не «1»)
Можно использовать SoapExtension от существующей платформы WSE2.0 для прерывания ответов с сервера.
public class MyClientSOAPExtension : SoapExtension
{
Stream oldStream;
Stream newStream;
// Save the Stream representing the SOAP request or SOAP response into
// a local memory buffer.
public override Stream ChainStream( Stream stream )
{
oldStream = stream;
newStream = new MemoryStream();
return newStream;
}
public override void ProcessMessage(SoapMessage message)
{
switch (message.Stage)
{
case SoapMessageStage.BeforeDeserialize:
// before the XML deserialized into object.
break;
case SoapMessageStage.AfterDeserialize:
break;
case SoapMessageStage.BeforeSerialize:
break;
case SoapMessageStage.AfterSerialize:
break;
default:
throw new Exception("Invalid stage...");
}
}
}
На этапе SoapMessageStage. BeforeDeserialize, можно считать ожидаемые данные, которые Вы хотите от oldstream (например, используйте XmlReader). Затем храните ожидаемые данные где-нибудь, чтобы себя использовал, и также Вы должны передать старые потоковые данные к newstream для веб-сервиса, позже подготавливают, чтобы использовать данные, например, десериализовать XML в объекты.
MSDN Library включает пример кода для получения XML и запроса и ответа, который можно использовать для архивации его. Очевидно, необходимо будет внести некоторые изменения, так как пример хранит данные в текстовом файле, но это не слишком сложно.